Autor Zpráva
Anonymní
Profil *
Ahojte ak $text je "lorem ipsum neviem čo ďalej" tak ako vypíšem prvé 2 slová "lorem ipsum" prosim?
Leopik 2x
Profil
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
Anonymní:
$text_ = explode(" ", $text);
echo $text_[0]." ".$test_[1];
Edit: pozdě :-(
Nox
Profil
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
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
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
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
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);
...
Medvídek
Profil
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;
}

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