#php #loops #recursion #multidimensional-array
#php #циклы #рекурсия #многомерный массив
Вопрос:
В принципе, я хочу использовать str_replace для всех значений многомерного массива. Кажется, я не могу понять, как бы я сделал это для многомерных массивов. Я немного застреваю, когда значением является массив, кажется, что он просто находится в бесконечном цикле. Я новичок в php, поэтому emaples были бы полезны.
function _replace_amp($post = array(), $new_post = array())
{
foreach($post as $key => $value)
{
if (is_array($value))
{
unset($post[$key]);
$this->_replace_amp($post, $new_post);
}
else
{
// Replace :amp; for amp; as the amp; would split into different vars.
$new_post[$key] = str_replace(':amp;', 'amp;', $value);
unset($post[$key]);
}
}
return $new_post;
}
Спасибо
Комментарии:
1. Покажите нам, к чему вы пришли на данный момент.
Ответ №1:
Это неправильно и приведет вас к бесконечному циклу:
$this->_replace_amp($post, $new_post);
Вам не нужно отправлять new_post
в качестве аргумента, и вы также хотите уменьшить проблему при каждой рекурсии. Измените свою функцию на что-то вроде этого:
function _replace_amp($post = array())
{
$new_post = array();
foreach($post as $key => $value)
{
if (is_array($value))
{
unset($post[$key]);
$new_post[$key] = $this->_replace_amp($value);
}
else
{
// Replace :amp; for amp; as the amp; would split into different vars.
$new_post[$key] = str_replace(':amp;', 'amp;', $value);
unset($post[$key]);
}
}
return $new_post;
}
Ответ №2:
…Что не так с array_walk_recursive?
<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
function test_print($item, $key)
{
echo "$key holds $itemn";
}
array_walk_recursive($fruits, 'test_print');
?>
Комментарии:
1. Потому что в вашем примере eggs, если вы добавляете вложенный уровень:
$fruits = [ 'sweet' => $sweet, 'sour' => 'lemon', 'its_not' => ['recursive_depth'] ];
в этом случае вы не получаете правильный ключ для ‘its_not’ — это дает вам0
ожидаемыйits_not
— Или, как кто-то сказал, ЭТА ФУНКЦИЯ ПОСЕЩАЕТ ТОЛЬКО КОНЕЧНЫЕ УЗЛЫ (php.net — лол, он заблокировал его)