Autor Zpráva
Miloš
Profil
Potřeboval bych rozdělit dlouhý text, ve kterém jsou jednotlivé části souvisle číslovány.
Tuším, že je na to vhodná funkce explode().
Pokud by byl oddělovač konstantní, například tečka, není to nic těžkého:
<?php
$pole = explode(".","První věta platí. Druhá leze z gatí. Třetí věta je jak včela. Čtvrtá bodne, uletěla.");
$max = count($pole);
for ($i = 0; $i < $max-1; $i++ ) {
  echo("$pole[$i].<br>");	
}
?>


Jenomže já bych potřeboval jako oddělovač číslo (1-3místné).
Zkusil jsem regulár, ale takhle to nefunguje:
<?php
$pole = explode("'^[[:digit:]]*$'","1. věta platí. 2. leze z gatí. 3. věta je jak včela. 4. bodne, uletěla.");
$max = count($pole);
for ($i = 0; $i < $max-1; $i++ ) {
  echo("$pole[$i]<br>");	
}
?>


A) Jak vnutím funkci explode() regulár coby oddělovač?
B) Šlo by to udělat jiným, vhodnějším způsobem?
svadla
Profil
Můžeš použít preg_split.
Miloš
Profil
Díky, tohle už funguje:
<?php
$pole = preg_split("/[\d,]+\./", "1. věta platí. 2. leze z gatí. 3. věta je jak včela. 4. bodne, uletěla. 5. věta. 6. věta Běta. 7. Koliba. 8. Pepina. 9. Brünhilda. 10. věta nakonec, přišel tam Japonec");
$max = count($pole);
for ($i = 1; $i < $max; $i++ ) {
  echo("$i.$pole[$i]<br>");	
}
?>


Je to slušný kód, nebo bastl? Neboli jde to udělat ještě jinak, vhodnějším způsobem, nebo mohu být spokojený?
ShiraNai7
Profil
Miloš:
<?php
$pole = preg_split("/[\d,]+\./", "1. věta platí. 2. leze z gatí. 3. věta je jak včela. 4. bodne, uletěla. 5. věta. 6. věta Běta. 7. Koliba. 8. Pepina. 9. Brünhilda. 10. věta nakonec, přišel tam Japonec");
for($i = 1; isset($pole[$i]); ++$i) echo ("$i.$pole[$i]<br>");
?>
Miloš
Profil
ShiraNai7:
Moc hezké, dík.

A kdybych takto chtěl rozdělit text, který je zapsaný v externím souboru (namísto přímého zápisu do proměnné)?
Našel jsem akorát funkci file()
<?php
$soubor = file("soubor.txt");
$pole = preg_split("/[\d,]+\./", "$soubor[0]");
for($i = 1; isset($pole[$i]); ++$i) echo ("$i.$pole[$i]<br>");
?>

jenomže ta uloží obsah souboru do pole, ve kterém je text rozdělený odřádkováními, takže by v souborech muselo být vše na jednom řádku, což nebude.
Existuje nějaká funkce, která obsah souboru namísto do pole vloží do obyčejné proměnné jako řetězec?
Alphard
Profil
file_get_contents()? Ani to není třeba ukládat do proměnné.
Miloš
Profil
Alphard:
Fantastické, to je přesně to, co jsem potřeboval:
<?php
$pole = preg_split("/[\d,]+\./", file_get_contents("soubor.txt"));
for($i = 1; isset($pole[$i]); ++$i) echo ("$i.$pole[$i]<br>");
?>


Ještě jednou moc dík všem.
ShiraNai7
Profil
Miloš:
Ještě ty závorky v tom echu je možno vynechat, nevšiml jsem si jich.
Miloš
Profil
ShiraNai7:
Jasně; ale nějak už jsem si zvykl psát echo se závorkami, takže mi nijak nevadí.
Str4wberry
Profil
Sice trochu pozdě, ale doplním, že by šlo kód ještě drobně vylepšit a vypsání provést pouhým:
echo "<ol>".implode("<li>", $pole)."</ol>";
Miloš
Profil
V tuhle hodinu už nejsem v stavu nad tím přemýšlet, ale kouknu na to. Dík.
pcmanik
Profil
ShiraNai7:
Overovanie vo for je pomalsie, ako ked sa vykona len 1-krat, preto by som povedal ze povodne Miloš-ove riesenie je rychlejsie.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0