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 * |
#2 · Zasláno: 18. 7. 2011, 11:10:21
|
||
o_O Profil |
#3 · Zasláno: 18. 7. 2011, 11:18:53
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"; 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 |
#5 · Zasláno: 18. 7. 2011, 11:36:10
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 * |
#6 · Zasláno: 18. 7. 2011, 11:36:23
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 * |
#7 · Zasláno: 18. 7. 2011, 11:50:00
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 |
#8 · Zasláno: 19. 7. 2011, 07:18:41 · Upravil/a: o_O
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 |
#9 · Zasláno: 19. 7. 2011, 07:37:03
o_O:
Namiesto neustaleho vyhodnocovania count() vo for, by som ho radsej nadefinoval, ako premennu. |
||
o_O Profil |
#10 · Zasláno: 19. 7. 2011, 07:40:39 · Upravil/a: o_O
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 |
#11 · Zasláno: 19. 7. 2011, 12:11:15 · Upravil/a: Str4wberry
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 … |
||
Časová prodleva: 13 let
|
0