| 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: 12 let
|
|||
0