Autor | Zpráva | ||
---|---|---|---|
moldow Profil * |
#1 · Zasláno: 9. 10. 2014, 10:44:59
Dobry den, priamo na stranke PHP je uvedeny tento priklad:
http://php.net/manual/en/function.substr-replace.php#19015 <? $oRIGINAL = "BritneySpears"; $sHORTER = substr_replace($oRIGINAL, '...', 10); echo ($sHORTER); ?> Da sa to upravit tak, aby script nebral len napevno 10 znakov, ale dynamicky spocital pocet znakov v premennej $oRIGINAL a na zaklade toho odrezaval napr. vzdy len posledne 3 znaky?
Dakujem. |
||
Tori Profil |
#2 · Zasláno: 9. 10. 2014, 10:48:34
|
||
juriad Profil |
#3 · Zasláno: 9. 10. 2014, 10:48:47
Ano, když změníš 10 na hodnotu -3, tak nahradí poslední tři znaky.
If start is negative, the replacing will begin at the start'th character from the end of string. A ano, můžeš si vymyslet libovolné pravidlo; třeba můžeš hledat mezery, počítat slova, počítat věty... |
||
moldow Profil * |
#4 · Zasláno: 9. 10. 2014, 11:06:58
Ok, v realnej situacii to mam zapisane nasledovne:
$bid->user_name = substr_replace($bid->user_name, '***', 1, 3); Vysledok teraz je takyto: Frantisek -> F***tisek Juro -> J*** Maximilian -> M***milian Ja ale potrebujem spocitat znaky v mene a - ak ich je 1 az 4 tak necha len prve pismeno a zvysne 3 znaky nahradi s * - ak ich je viac ako 4 tak necha prve a posledne pismene a zvysne znaky nahradi * Vysledok potom: Frantisek -> F*******k Juro -> J*** Maximilian -> M********n |
||
lionel messi Profil |
moldow:
> a ale potrebujem spocitat znaky v mene a > - ak ich je 1 az 4 tak necha len prve pismeno a zvysne 3 znaky nahradi s * > - ak ich je viac ako 4 tak necha prve a posledne pismene a zvysne znaky nahradi * $mena = array("František", "Juro", "Maximilián",); foreach ($mena as $meno) { if (strlen($meno) < 5) { $meno = substr_replace($meno, "***", 1, 3); } else { $meno = substr_replace($meno, "***", 1, strlen($meno) - 2); } echo $meno; //vypíše J*** F***k, M***n } |
||
Tori Profil |
lionel messi:
No a teď si to zkuste se jmény Řehoř a Váňa... |
||
lionel messi Profil |
Tori:
„No a teď si to zkuste se jmény Řehoř a Váňa...“ mb_substr som nepoužil zámerne, pretože ho ani moldow nepoužil, zrejme teda nebude nutné (nemusí používať UTF-8) alebo mi ešte niečo iné uniklo? Ak áno, potom sa ospravedlňujem, ale vo svojom výtvore vidím ako hlavný nedostatok to, že pri zadaní Maximilián nevráti M********n , ale iba M***n .
|
||
lionel messi Profil |
lionel messi:
„vo svojom výtvore vidím ako hlavný nedostatok to, že pri zadaní Maximilián nevráti M********n , ale iba M***n .“
Toto by sa možno dalo upraviť nejako takto, hoci popísané riešenie je zrejme nič-moc: $mena = array("František", "Juro", "Maximilián",); foreach ($mena as $meno) { if (strlen($meno) < 5) { $meno = substr_replace($meno, "***", 1, 3); } else { $nahradenie = ""; for ($i = 1; $i < (strlen($meno) - 2); $i++) { $nahradenie .= "*"; //cyklus za každé písmeno, kt. budeme nahradzovať vygenerujeme jednu hviezdičku } $meno = substr_replace($meno, $nahradenie, 1, strlen($meno) - 2); } echo $meno; //vypíše J*** F***k, M*********n } Varianta UTF-8, vyhodil som prvú podmienku, pretože keď by sme mali meno Ján , chceme J*n a nie J***n :
$mena = array("František", "Juro", "Maximilián",); foreach ($mena as $meno) { $nahradenie = ""; for ($i = 1; $i < (mb_strlen($meno) - 2); $i++) { $nahradenie .= "*"; //cyklus za každé písmeno, kt. budeme nahradzovať vygenerujeme jednu hviezdičku } $meno = mb_substr($meno, 0, 1) . $nahradenie . mb_substr($meno, -1, 1); //k prvému písmenu pridáme nahradenie a posledné písmenko echo $meno; //vypíše J*** F***k, M*********n } |
||
Tori Profil |
#9 · Zasláno: 9. 10. 2014, 17:32:18
Možná jednodušší místo cyklu použít str_repeat, počet opakování se snadno dopočítá:
mb_internal_encoding('UTF-8'); $mena = array("František", "Juro", "Maximilián", 'Jan', 'Řehoř', 'Váňa'); foreach ($mena as $meno) { $ln = mb_strlen($meno); $repeat = $ln > 4 ? $ln - 2 : 3; $nahrazeni = mb_substr($meno, 0, 1) . str_repeat('*', $repeat) . ($ln > 4 ? mb_substr($meno, -1) : ''); echo '<br>', $meno, ' -- ', $nahrazeni; } |
||
moldow Profil * |
#10 · Zasláno: 10. 10. 2014, 16:42:27
Dakujem velmi pekne za pomoc, teraz uz presne viem co mam robit.
|
||
Časová prodleva: 10 let
|
0