Autor | Zpráva | ||
---|---|---|---|
Anonymní Profil * |
#1 · Zasláno: 16. 7. 2010, 22:09:53
Ahojte ak $text je "lorem ipsum neviem čo ďalej" tak ako vypíšem prvé 2 slová "lorem ipsum" prosim?
|
||
Leopik 2x Profil |
#2 · Zasláno: 16. 7. 2010, 22:18:38
Spravil by som po cez explode:
<?php $text = "slovo slovo slovo slovo"; $novy_text = explode(" ", $text); $prve2slova = $novy_text[0]." ".$novy_text[1]; unset($novy_text); echo $prve2slova; ?> |
||
Radek9 Profil |
#3 · Zasláno: 16. 7. 2010, 22:19:11 · Upravil/a: Radek9
Anonymní:
$text_ = explode(" ", $text); echo $text_[0]." ".$test_[1]; |
||
Nox Profil |
#4 · Zasláno: 16. 7. 2010, 22:39:37 · Upravil/a: Nox
echo substr($text, 0, strpos($text, " ", strpos($text, " ")); Varianty s explode() jsou zbytečně neefektivní, pokud by šlo třeba o článek, PHP bude muset vytvořit pole třeba o 1000 prvcích, pak použijete 2 a zbylých 998 je na nic (aspoň Leopik má malé plus za unset) |
||
Majkl578 Profil |
#5 · Zasláno: 16. 7. 2010, 22:55:04 · Upravil/a: Majkl578
Nox:
Stačílo by ve třetím argumentu uvést limit. $prvniDveSlova = explode(' ', $nejakyVelmiDlouhyClanek, 2); $prvniDveSlova = implode(' ', $prvniDveSlova); Ovšem regulár je elegantnější: preg_match('~[^ ]+ [^ ]+~', $nejakyVelmiDlouhyClanek, $match); echo $match[0]; //první dvě slova |
||
hary28 Profil |
#6 · Zasláno: 17. 7. 2010, 10:57:33
Zkus se podívat na tuto funkci která je na tomto blogu http://rjwebdesign.net/.
function perex($text, $length = 60, $ending = "...") { if (strlen($text) <= $length) { $text = $text; } else { $text = substr($text, 0, $length); $pos = strrpos($text, " "); $text = substr($text, 0, $pos); $text .= $ending; } return $text; } |
||
Keeehi Profil |
#7 · Zasláno: 17. 7. 2010, 12:31:06 · Upravil/a: Keeehi
hary28:
1) Tato funkce nevrátí první 2 slova, ale vrátí maximálně $lenght znaků z $text z nichž nakonec ořízne poslední slovo a připojí $ending pokud se muselo zkracovat. 2) Navíc je i příšerně napsaná, viz řádek 5 $text = $text; Osobně se mi nejvíc libí regulár z [#5] |
||
tiso Profil |
#8 · Zasláno: 17. 7. 2010, 12:54:44
Pokiaľ to má byť naozaj prvých x slov a nie len 2, tak ten regulár v #5 bude:
... $wordCount=4; preg_match('~[^\s]+(?:\s+[^\s]+){'.($wordCount-1).'}~', $nejakyVelmiDlouhyClanek, $match); ... |
||
Časová prodleva: 6 dní
|
|||
Medvídek Profil |
#9 · Zasláno: 23. 7. 2010, 05:24:41
Já mam takovouto funkci, jelikož potřebuji udělat výpis prvních pár znaků z databáze, kde se mohou být i html značky a nesmějí zůstat otevřené :)
Třeba se ti to bude hodit. function xhtml_cut($s, $limit) { $length = 0; $tags = array(); // dosud neuzavřené značky for ($i=0; $i < strlen($s) && $length < $limit; $i++) { switch ($s[$i]) { case '<': // načtení značky $start = $i+1; while ($i < strlen($s) && $s[$i] != '>' && !ctype_space($s[$i])) { $i++; } $tag = substr($s, $start, $i - $start); // přeskočení případných atributů $in_quote = ''; while ($i < strlen($s) && ($in_quote || $s[$i] != '>')) { if (($s[$i] == '"' || $s[$i] == "'") && !$in_quote) { $in_quote = $s[$i]; } elseif ($in_quote == $s[$i]) { $in_quote = ''; } $i++; } if ($s[$start] == '/') { // uzavírací značka array_shift($tags); // v XHTML dokumentu musí být vždy uzavřena poslední neuzavřená značka } elseif ($s[$i-1] != '/') { // otevírací značka array_unshift($tags, $tag); } break; case '&': $length++; while ($i < strlen($s) && $s[$i] != ';') { $i++; } break; default: $length++; /* V případě kódování UTF-8: while ($i+1 < strlen($s) && ord($s[$i+1]) > 127 && ord($s[$i+1]) < 192) { $i++; } */ } } $s = substr($s, 0, $i); if ($tags) { $s .= "</" . implode(">...</", $tags) . ">"; } return $s; } |
||
Časová prodleva: 14 let
|
0