|
|
|
| Доброго дня!
Простите за тупизну, со мной такое бывает.
<?
$str=' <p> <p><p> <p><p><br />====<img srcdfj двоатотди vdnnv</p></p> </p></p></p>';
function brp(&$s){
$s=trim($s);
if(preg_match("/^<p>/ui",$s)){
$s=preg_replace("/^<p>\s*|\s*<\/p>$/ui","",$s);
$s=trim($s);
if(preg_match("/^<p>/ui",$s)){
brp($s);
}
else{
return $s;
}
}
else{
return $s;
}
}
echo brp($str);
?>
|
Вот, возвращается пустая строка.
WHY???
Спасибо. | |
|
|
|
|
|
|
|
для: Deed
(28.06.2015 в 08:24)
| | по первому условному пути (когда %subject%) функция ничего не возвращает. Нету оператора return ...; | |
|
|
|
|
|
|
|
для: Trianon
(28.06.2015 в 09:04)
| | Спасибо за ответ, но, если строка НЕ начинается с "<p>", return, ведь, прописан. | |
|
|
|
|
|
|
|
для: Deed
(28.06.2015 в 09:18)
| | а с чего она начинается? | |
|
|
|
|
|
|
|
для: Valick
(28.06.2015 в 09:28)
| | Она после трима начинается с <p>.
<?
$str=' <p> <p><p> <p><p><br />====<img srcdfj двоатотди vdnnv</p></p> </p></p></p>';
function brp($s){
$s=trim($s);
if(preg_match("/^<p>/ui",$s)){
$s=preg_replace("/^<p>\s*|\s*<\/p>$/ui","",$s);
brp($s);
}
else{
return $s;
}
}
echo brp($str);
?>
|
Ну-у, как бы для начала ф-ция делает трим, потом смотрит, если первые символы - <p>, она их режет, и, по идее, снова вызывает саму себя. Дальше, если строка с параграфа не начинается, ф-ция выводит результат.
Так, вроде бы. | |
|
|
|
|
|
|
|
для: Deed
(28.06.2015 в 09:35)
| | >Ну-у, как бы для начала ф-ция делает трим, потом смотрит, если первые символы - <p>, она их режет, и, по идее, снова вызывает саму себя....
В том, что функция вызывает саму себя, (очевидно, уже после того как кто-то вызвал её снаружи) вы отдаете отчет.
То, что при этом функция неминуемо вынуждена не только вернуть результат самой себе, но и после этого вернуть результат наружу - в точку исходного вызова, вы не учитываете. | |
|
|
|
|
|
|
|
для: Valick
(28.06.2015 в 09:28)
| | В общем, все это дело заменил на
<?
$str=' <p> <p><p> <p><p><br />====<img srcdfj двоатотди vdnnv</p></p> </p></p></p>';
$str=preg_replace("/^(\s*<p>\s*)+|(\s*<\/p>\s*)+$/ui", "", $str);
?>
|
Но хотелось бы понять, почему не сработала здесь рекурсия. | |
|
|
|
|
|
|
|
для: Deed
(28.06.2015 в 08:24)
| | because))
Важная поправка - возвращается не пустая строка, а NULL
Когда функция возвращает NULL? Если явно вернуть NULL или, если ничего не возвращать. У вас второй случай.
Настройте отладчик, выполните всю эту канитель по шагам и тогда поймете в чем дело | |
|
|
|