|
|
|
| Как можно в строке заменить $a на $b и $c в таком порядке: если $a найден в первые то заменяем его на $b, а второй раз заменяем на $c и ...( в нечетном заменяем на $b, а в четном на $c) | |
|
|
|
|
|
|
|
для: broker
(17.04.2005 в 19:42)
| | Это лучше сделать при помощи функции обратного вызова и preg_replace_callback(), которые доступны, если воспрользоваться регулярными выражениями
<?php
// В переменной $text находится исходный текст
$text = "...";
$first = true;
// функция обратного вызова
function zebra($matches)
{
// Флаг принимает значение true, если это
// первая замена и false в противном случае
GLOBAL $first;
// Переменные
$b = "Текст замены для b";
$c = "Текст замены для c";
// Если первый раз, то меняем на $b
if($first)
{
$first = !$first;
return $b;
}
// Если второй, то на $c
else
{
$first = !$first;
return $c;
}
}
// Производим замену $a в тексте
echo preg_replace_callback(
"|$a|i",
"zebra",
$text);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(17.04.2005 в 22:42)
| | Сheops Спасиб ). А я тут пробовал с двумя строчными переменными и еще с циклом ... вообщем не красиво у меня получился.. Это то что надо) | |
|
|
|
|
|
|
|
для: cheops
(17.04.2005 в 22:42)
| | Ну я немного изменил, но все работает:
<?php
$first = false;
function myfunc()
{
GLOBAL $first;
$b = "<b>";
$c = "</b>";
$first = !$first;
if($first) { return $b; } else { return $c; }
}
function func1($text){
$text = preg_replace_callback("|\002|i","myfunc",$text);
return $text;
}
echo func1("Привет Как дела ?");
?>
|
Думаю аналогично что можно создать такую функцию в классе тоже :
<?php
class myclass {
var $first = false;
function myfunc()
{
$b = "<b>";
$c = "</b>";
$this->first = !$this->first;
if($this->first) { return $b; } else { return $c; }
}
function func1($text)
{
$text = preg_replace_callback("|\002|i","{$this->myfunc()}",$text);
return $text;
}
}
$class1 = new myclass;
echo $class1->func1("Привет Как дела ?");
?>
|
Но к сажелению и тут без ошибок не как не обойтись ...
Warning: preg_replace_callback() [function.preg-replace-callback]: requires argument 2, '<b>', to be a valid callback in C:\server\htdocs\wewe2.php on line 16
|
Что тут может быть не понимаю, все вроде бы нормально написано... | |
|
|
|
|
|
|
|
для: broker
(18.04.2005 в 16:36)
| | Функция обратного вызова myfunc() обязательно должна иметь параметр, через который передаётся массив вхождений, даже если вы его не используете в работе функции. | |
|
|
|
|
|
|
|
для: cheops
(17.04.2005 в 22:42)
| | Во первых без параметра в обычном программе нет ошибок, я тут передал параметр и без разницы:
<?php
class myclass {
var $first = false;
function myfunc($mode)
{ if ($mode==0){
$b = "<b>";
$c = "</b>";
}else{
$b = "<u>";
$c = "</u>";
}
$this->first = !$this->first;
if($this->first) { return $b; } else { return $c; }
}
function func1($text)
{
$text = preg_replace_callback("|\002|i","{$this->myfunc(1)}",$text);
return $text;
}
}
$class1 = new myclass;
echo $class1->func1("Привет Как дела ?");
?>
Warning: preg_replace_callback() [function.preg-replace-callback]: requires argument 2, '<u>', to be a valid callback in C:\server\htdocs\wewe2.php on line 20
|
| |
|
|
|
|
|
|
|
для: broker
(19.04.2005 в 18:12)
| | Я что-то не уверен, что можно функции preg_replace_callback передавать метод класса и имеет ли она к нему доступ и вообще правильно ли интерпретирует эту строку, может для этого создать всё-таки внешнюю функцию? | |
|
|
|