Рекурсивная функция PHP для замены символов - PullRequest
1 голос
/ 28 мая 2011

Эй, я пытаюсь разработать рекурсивную функцию, которую я могу использовать, чтобы убрать строку экземпляров с несколькими значениями.

Это то, что у меня есть:

$words = 'one__two_"__three';

$words = stripall(array('__', '"'), '_', $words);

echo $words;

function stripall($values, $replace, $string) {

    foreach ($values as $value) {

        if (strpos($string, $value)) {

            $string = str_replace($value, $replace, $string);

            stripall($values, $replace, $string);
        }
    }

    return $string;
}

Здесь строка $ words лишена всех экземпляров двух символов подчеркивания (__) или кавычки ("). Или, по крайней мере, теоретически ...

Целевое возвращаемое значение:

one_two_three

Однако я получаю "one_two ___ three"

Может кто-нибудь помочь, пожалуйста?

Ответы [ 4 ]

1 голос
/ 28 мая 2011

Я немного сбит с толку ожидаемым результатом:

one_two_three

Предполагая, что ваша строка:

$words = 'one__two_"__three';

А ваши правила:

Здесь строка $ words получает лишенный всех случаев двух подчеркивание (__) или цитата (")

Мы бы разделили строку так:

$words = 'one[__]two_["][__]three';

Итак, ваш ожидаемый результат должен быть:

onetwo_three

Который с помощью формы массива str_replace :

$words = 'one__two_"__three';
echo str_replace(array('"', "__"), "", $words) . "\n";

Я получаю именно такой вывод:

$ php test.php
onetwo_three
0 голосов
/ 15 ноября 2016
$words = 'one__two_"__three';
$words = stripall(array('"','__'), '_', $words);
echo $words;
function stripall($values, $replace, $string) {
    foreach ($values as $value) {
        while (strpos($string, $value)) {
            $string = str_replace($value, $replace, $string);
            stripall($values, $replace, $string);
        }
    }
    return $string;
}

Изменено значение IF на время и сначала удалить ", а затем проверить __

0 голосов
/ 30 июня 2014

Хотите попробовать мой?

//Example:
/*
    $data = strReplaceArrayRecursive(
        array('{name}'=>'Peter','{profileImg}'=>'./PRF-AAD036-51dc30ddc4.jpg'),
        array(
            'title'=>'My name is {name}',
            'post'=>array(
                'author' => '{name}',
                'image' => '{profileImg}',
                'content' => 'My post.'
            )
        )
    );
    print_r($data);
//Expect:
Array
(
    [title] => My name is Peter
    [post] => Array
        (
            [author] => Peter
            [image] => ./PRF-AAD036-51dc30ddc4.jpg
            [content] => My post.
        )

)
*/
function strReplaceArrayRecursive($replacement=array(),$strArray=false,$isReplaceKey=false){
    if (!is_array($strArray)) {
        return str_replace(array_keys($replacement), array_values($replacement), $strArray);
    }
    else {
        $newArr = array();
        foreach ($strArray as $key=>$value) {
            $replacedKey = $key;
            if ($isReplaceKey) {
                $replacedKey = str_replace(array_keys($replacement), array_values($replacement), $key);
            }
            $newArr[$replacedKey] = strReplaceArrayRecursive($replacement, $value, $isReplaceKey);
        }
        return $newArr;
    }
}
0 голосов
/ 28 мая 2011

Эта функция совершенно не нужна. str_replace уже делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...