Как получить значения всех ключей мнгомерного массива

abajun

Новичок
Как получить значения всех ключей мнгомерного массива

Есть массив типа
PHP:
Array
(
    [k_item] => 27
    [s_name] => /production/house
    [a_tree] => Array
        (
            [0] => Array
                (
                    [k_item] => 28
                    [s_name] => /production/house/alarmclocks
                    [a_tree] => Array
                        (
                            [0] => Array
                                (
                                    [k_item] => 29
                                    [s_name] => /production/house/alarmclocks/classic
                                    [a_tree] => Array
                                        (
                                        )

                                )
...
Как можно получить значения всех елементов сключом [s_name].

$array[s_name] - возвращает только верхний уровень
 

abajun

Новичок
Что должно вызываться рекрусивно?

Если уровней немного например три, то как получить
следующий уровень вложенности.
 

Vallar_ultra

Любитель выпить :)
array_walk_recursive ( array &input, callback funcname [, mixed userdata] )

пример:
PHP:
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)
{
   echo "$key holds $item\n";
}

array_walk_recursive($fruits, 'test_print');
 

abajun

Новичок
Автор оригинала: Vallar_ultra
array_walk_recursive
Мне кажется ето не будет работать из-за этого

Обратите внимание, что ключ 'sweet' никогда не отображается. Никакой ключ, соответствующий значению типа array, не будет передан в функцию.
 

Vallar_ultra

Любитель выпить :)
Автор оригинала: abajun
Мне кажется ето не будет работать из-за этого

Обратите внимание, что ключ 'sweet' никогда не отображается. Никакой ключ, соответствующий значению типа array, не будет передан в функцию.
Если РНР4
PHP:
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)
{
   echo "$key holds $item\n";
   
   if (is_array($item)) {
   		array_walk($item, 'test_print');
   }
   
}

array_walk($fruits, 'test_print');
 

bgm

 
abajun
Задача весьма простая:

1. Функция переберает все пары "ключ-значение" входного массива;
2. Если "значение" пары является массивом, то функция рекурсивно вызывает саму себя.
3. Если во входном параметре встречается искомый индекс, то, в случае если значение для этого индекса не является массивом, осуществляется запись по ссылке в массив, где собираются значения.

P.S. Перебор проще осуществлять через foreach
 

abajun

Новичок
Автор оригинала: Vallar_ultra
array_walk_recursive ( array &input, callback funcname [, mixed userdata] )

пример:
PHP:
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');

function test_print($item, $key)
{
   echo "$key holds $item\n";
}

array_walk_recursive($fruits, 'test_print');
А как получить все значения только определенного ключа.
 

Vallar_ultra

Любитель выпить :)
а внутри функции чё-нить дописать не судьба?
Подсказываю, одна global переменная и if вставить надо :)))
 

bgm

 
Vallar_ultra
Какая ещё глобальная переменная?

Vital_N
Что-то мне подсказывает, что в данном случае размер массива не критичен :)
 

Vallar_ultra

Любитель выпить :)
2bgm

Ему ведь куда-то результат накопить надо, так?! Ну дык самое простое - это global $var, где $var - коллекция результатов поиска.

-~{}~ 19.09.06 16:05:

2abajun

Если до сих пор не понятно как делать - то пиши мне в личные...
 

bgm

 
Vallar_ultra
Самое простое и самое правильное - результат накапливать передавая в функцию аргумент по ссылке.
 
Сверху