Autor Zpráva
alan
Profil *
chtěl bych se zeptat,mám v db text,a potřeboval bych aby se mě v php objevil jen kousek,dejme tomu 10slov,a za tím desátém jdělal pár teček,zbytek bych si vyřešil...
myslel jsem že by to šlo přes limit,ale ten už používám aby zobrazil jeden článek z toho DB...
nevíte jak by se to dalo?díky za odpověď a rady:)
hexcross..
Profil *
To co hledáš je PHP funkce substr nebo mb_substr (s nastavením kódování pro český znaky), ořeže ti řetězec na požadovanou délku. Limit v SQL ti označuje počet vybraných řádků.
o_O
Profil
alan:
dejme tomu 10slov
Musí to být přesně na slova, nebo na počet znaků?
alan
Profil *
může bejt počet znaků...potřeboval bych to vytáhnout z DB právě,našel jsem na php.net jeden script,ale ten nefunguje s proměnnýma...
možná to je blbost ale...
<?php
$textK = substr("$zaznam["text"]", 0, -20);
echo "$textK";
?>

píše to chybu
Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/users/alan/..../web/index.php on line 83

aha,ted jsem si všiml apostrofu...tak jsem je opravil a píše to něco jinýho
<?php
$textK = substr("$zaznam['text']", 0, -20);
echo "$textK";
arse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/users/alan/.../web/index.php on line 83

mno,opravil jsem i závorky,takže to jde ale neukazuje to text
$textK = substr("$zaznam('text')", 0, -20);

Moderátor Alphard: Sloučeno více příspěvků.
shaggy
Profil
alan:
A ty aj programuješ, alebo len tak náhodne píšeš zhluk písmen?
Logicky toto: $zaznam['text'] nebude to isté, ako toto $zaznam('text'). Ak v tom nevidíš rozdiel a myslíš si, že môžeš jeden znak vymeniť za druhý (veď zátvorka ako zátvorka), tak sa na to rovno vykašli.
Poradím ti - použi ten predposledný príklad, akurát sa zamysli, kde nemusia byť úvodzovky.
A toto nie je chat, najprv si premysli, čo chceš napísať. Ja sem tiež nepíšem všetky myšlienky, ktoré mi prebehnú hlavou - ty si to máš ujasniť, vyskúšať a až keď ti to skutočne nejde (po niekoľkých dňoch), tak sem napíš.
okolojdouci
Profil *
alan:
Uvozovky (a apostrofy) ohraničují text, nikoliv proměnné. Proč dáváš do uvozovek proměnnou?

$textK = substr($zaznam['text'], 0, -20);
echo $textK;
hexcross..
Profil *
alan:
nevím co na tom nechápeš, každopádně tady to máš ještě lépe vystvětlené i na příkladech :
http://www.tvorba-webu.cz/php/string.php
o_O
Profil
Zaujal mě ten nápad na mb_substr se slovy, tak jsem se pokusil něco takového napsat. Nemám čas to teď testovat, každopádně toto funguje:
function mb_substrByWords($string,$maxLength,$minWords=1){
/**
** Mb_substr na slova **
* (string) $string
* (int) $maxLength
* (int) $minWords
**/
  if(strlen($string)<=$maxLength)
    return $string; // V případě, že je samotný text kratší, funkce skončí.
  
  $words=explode(" ",$string); // Rozdělíme si text na slova.
  $ret=array();$length=0;$count=count($words);
  for($i=0;$i<$count;$i++) // Projdeme slova
    if($length+strlen($words[$i])<=$maxLength){
      $ret[]=$words[$i]; // V případě, že ještě nebylo dosaženo $maxLength
      $length+=strlen($words[$i])+1; // Přičteme délku stringu 
    }else
      $i=$count; // V opačném případě skončíme procházení pole.
  
  $retWords=count($ret);
  if($retWords<$minWords) // Neobsahuje pole minimální počet slov?
    return preg_replace('~^(.*?)([\W _]+)$~','$1',mb_substr($string,0,$maxLength)).'...'; // ^ Neobsahuje - vrátíme normální substr + 3 tečky a zrušíme na konci čárky, tečky a podobné.

    
  // Pole obsahuje dostatek slov, nyní je jej třeba zkontrolovat a pak vrátit daný výstup.
  $ret[$retWords-1]=preg_replace('~^(.*?)([\W_]+)$~','$1',$ret[$retWords-1]); // Kdyby na konci byl třeba takový otazník, nevypadal by výstup s třemi tečkami moc pěkně. 
  
  return implode(" ",$ret).'...';    
}

echo mb_substrByWords("Nějaký velice dlouhý text, který by se nevešel do našeho nadpisu.",30)."<br>"; // Nějaký velice dlouhý text...
echo mb_substrByWords("Nějaký velice dlouhý text, který by se nevešel do našeho nadpisu.",16,50)."<br>"; // Nějaký velice...
echo mb_substrByWords("Nějaký velice dlouhý text, který by se nevešel do našeho nadpisu.",600,2)."<br>"; // Nějaký velice dlouhý text, který by se nevešel do našeho nadpisu.
echo mb_substrByWords("Nějaký velice dlouhý text, který by se nevešel do našeho nadpisu.",51)."<br>"; // Nějaký velice dlouhý text, který by se nevešel do...


Pokud narazíte na nějakou chybu, napište jí sem. Díky.
pcmanik
Profil
o_O:
Namiesto neustaleho vyhodnocovania count() vo for, by som ho radsej nadefinoval, ako premennu.
o_O
Profil
pcmanik:
Opraveno. Navíc jsem přidal na řádku 17 i +1 (každá mezera je jeden znak). Ještě chci vyřešit problém s vícebitovými znaky na konci, aby nedocházelo například k zabouchnut�...
Str4wberry
Profil
Proč nepoužijete rovnou zkrácení a případně i přidání třech teček v MySQL?
SELECT CONCAT(SUBSTRING_INDEX(sloupec, " ", 10), " [...]") zkracene
FROM …

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