[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: массивы + рекурсия
yintar
Всем привет!!!.Я уже не раз обращаюсь с этим вопросом помогите,пожалуйста, разобраться окончательно что не так.
Есть такой массив (он может быть неограниченной вложенности):


$b = array(
'0' => array(
'text' => 'фрукты',
'count' => '2',
'line' => '1',
'children' => array(
'0' => array(
'text' => 'банан',
'count' => '10',
'line' => '2',
'children' => '',
),
'1' => array(
'text' => 'груша',
'count' => '5',
'line' => '3',
'children' => array(
'0' => array(
'text' => 'дыня',
'count' => '1',
'line' => '5',
'children' => array(
'0' => array(
'text' => 'арбуз',
'count' => '1',
'line' => '5',
'children' => '',
)
)
)
)
)
)
)
);


А мне нужен такой:

Array
(
[0] => Array
(
[text] => банан
[count] => 10
[line] => 2
[children] =>
)

[1] => Array
(
[text] => дыня
[count] => 1
[line] => 5
[children] =>
)

[2] => Array
(
[text] => груша
[count] => 5
[line] => 3
[children] =>
)

[3] => Array
(
[text] => арбуз
[count] => 5
[line] => 3
[children] =>
)
[4] => Array
(
[text] => фрукты
[count] => 2
[line] => 1
[children] =>
)

)

В принципе не важно в какой последовательности расположены элементы(фрукты,арбуз,груша,дыня,банан) в массиве,а главное чтобы они все там были.

Дела. так:

function test($b) {
$a = array();
foreach ($b as $item) {
if ($item['children'] != '') {
$a += test($item['children']);
}

$item['children'] = '';
$a[] = $item;
}

return $a;
}

но в массиве $a не хватает элемента

(
[text] => арбуз
[count] => 5
[line] => 3
[children] =>
)
Что я делаю не так???????????
sergeiss
Если честно, то не вникал глубоко в написанное. Но вот это не понял:

Цитата (yintar @ 3.07.2014 - 23:27)
$a += test($item['children']);

Ты что хочешь сделать, к массиву добавить другой массив? Для этого есть специальная функция

array array_merge ( array $array1 [, array $... ] )


Цитата (yintar @ 3.07.2014 - 23:27)
if( $item['children'] != '' )

А вот это, наверное, лучше заменить на
if( is_array( $item['children'] ) )


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
yintar
sergeiss Спасибо Вам большое.Ваш совет очень помог.Использовал вместо

$a += test($item['children']);

вот это
$a= array_merge ($a, $this->getLineAndCountUsers($item['children']));

и все заработало ,но я так до конца и не понял в чем разница между
$a += test($item['children'])

и
$a= array_merge ($a, $this->getLineAndCountUsers($item['children']));

Ведь вроде аналогичные вещи.Объясните пожалуйста.
sergeiss
Цитата (yintar @ 4.07.2014 - 00:40)
Ведь вроде аналогичные вещи.Объясните пожалуйста.

Для разных типов данных - свои возможности сложения.
"+=" используется только для суммирования чисел.
Для строк ".=" (точка и равно).
Для массивов функция array_merge().

Так что это не "аналогичные вещи" вовсе :)

Вот если тебе понадобится к какому-то числовому элементы массива прибавить число, то там да, будет += работать

Например.

$c[10]=35.7;

$c[10] += 45.7; // корректная запись


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vital
из $a += ... делаем => $a[] = ... так например.

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
sergeiss
Цитата (vital @ 4.07.2014 - 01:18)
из $a += ... делаем => $a[] = ... так например.

Не годится, т.к. ТС хотет добавлять в массив не один элемент, а другой массив неизвестной заранее размерности. Это только функцией можно сделать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.