Рекурсивный массив

Статус
В этой теме нельзя размещать новые ответы.
D

drwhite

Прохожие
Чтобы начать тему в разделе PHP для начинающих нужно иметь пять постов.

Как выявить рекурсию в массиве, чтобы не писать в рекурсивных функциях счетчик вложенности уровня?

PHP:
$arr = Array('k1' => 'v1');
$arr[] = $arr;

print_r($arr)

Array
(
    [k1] => v1
    [0] => Array
 *RECURSION*
)
 
Массив не может быть рекурсивным по определению.
Напряги мышцы и напиши по человечески.
 
Тоже не понятно каким боком.

is_array просто вернёт true в случае массива (даже если он одномерный).

определить многомерность при помощи одного foreach тоже не получиться.
 
Вот простой метод получения пар ключ-значение для многомерных массивов с помощью итераторов библиотеки SPL:
Для просмотра ссылки Войди или Зарегистрируйся
 
Загнётся этот метод на вложенных массивах. Пробовал. Вернулся к старой доброй рекурсии.
 
Массив не может быть рекурсивным по определению.
Напряги мышцы и напиши по человечески.

Ну, может, не очень по-человечески, но по-другому пока не знаю как описать проблему:
PHP:
01 function processStringRecursive($data = '')
02 {
03   if(is_array($data))
04   {
05     foreach($data as $k => $v)
06     {
07       если ($v ссылается или содержит $data)
08       {
09         continue;
10       };//
11 			
12       $res_data[$k] = processStringRecursive($data[$k]);
13     };//foreach
14   }
15   else if(is_scalar($data))
16   {
17     $res_data = htmlspecialchars($data);
18   }
19   else
20   {
21     $res_data = false;
22   };//
23   return $res_data;
24 }//func

$test_data = Array();
$test_data[] = '<p>P1</p>';
$test_data[] = Array('<p>P21</p>', '<p>P22</p>');
$test_data[] = '<p>P3</p>';
$test_data[] = $test_data;

echo '<pre>';
print_r(processStringRecursive($test_data));
echo '</pre>';

Как сторку 07 перевести на php?
 
  • Заблокирован
  • #8
Тоже не понятно каким боком.

is_array просто вернёт true в случае массива (даже если он одномерный).

определить многомерность при помощи одного foreach тоже не получиться.

я понял вопрос по-своему: что ТС хотел определить наличие вложенных массивов в данном массиве.

соответственно

в foreach предлагается перебирать все элементы и каждый проверять
if (is_array($arr) && count($arr))
значит вложенный массив.

другое дело, что он и вправду имел в виду рекурсивный массив :D
 
я понял вопрос по-своему: что ТС хотел определить наличие вложенных массивов в данном массиве.

Определение вложенных массивов вполне очевидная операция, сейчас функция использует второй параметр, который сравнивается с внутренним статическим счетчиком и по умолчанию <= 256, что не позволяет функции зациклиться, но этот способ не вполне.

Так строчка
Код:
if($v содержит/ссылается на $data)
{
  continue;
}
на php переводится или нет?

Да, еще, что такое «ТС»?
 
ТС - топикстартер (тот кто тему открыл), то бишь ТЫ. :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху