Найти все ключи второго уровня в многомерном массиве в php

Я хочу создать список второго уровня используемых ключей. Каждая запись не содержит всех одинаковых клавиш. Но мне нужно знать, что у всех ключей. array_keys () не работает, он возвращает только список чисел.

По сути, вывод Im ищет:

действие, id, validate, Base, Ebase, Ftype, Qty, Type, Label, Unit

У меня есть большой многомерный массив, который следует за форматом:

Array ( [0] => Array ( [action] => A [id] => 1 [validate] => yes [Base] => Array ( [id] => 2945 ) [EBase] => Array ( [id] => 398 ) [Qty] => 1 [Type] => Array ( [id] => 12027 ) [Label] => asfhjaflksdkfhalsdfasdfasdf [Unit] => asdfas ) [1] => Array ( [action] => A [id] => 2 [validate] => yes [Base] => Array ( [id] => 1986 ) [FType] => Array ( [id] => 6 ) [Qty] => 1 [Type] => Array ( [id] => 13835 ) [Label] => asdssdasasdf [Unit] => asdger ) ) 

Спасибо за помощь!

 <?php // Gets a list of all the 2nd-level keys in the array function getL2Keys($array) { $result = array(); foreach($array as $sub) { $result = array_merge($result, $sub); } return array_keys($result); } ?> 

edit: удалена избыточная функция array_reverse ()

 array_keys(call_user_func_array('array_merge', $a)); 

Объедините все значения и извлеките полученные ключи.

 foreach($bigArray as $array){ foreach($array as $key=>$value){ echo $key; } } 

Это должно делать то, что вы хотите.

Что-то вроде этого:

 $your_keys = array_keys($your_array[0]); 

Конечно, это относится к тому, что все подмассивы имеют одинаковые ключи; в этом случае вам понадобятся только ключи первого вспомогательного массива (нет необходимости перебирать все субмассивы первого уровня, я думаю)

И, как сокращенный / упрощенный пример:

 $your_array = array( array( 'action' => 'A', 'id' => 1, 'base' => array('id' => 145), ), array( 'action' => 'B', 'id' => 2, 'base' => array('id' => 145), ), array( 'action' => 'C', 'id' => 3, 'base' => array('id' => 145), ) ); $your_keys = array_keys($your_array[0]); var_dump($your_keys); 

Вы получите:

 array 0 => string 'action' (length=6) 1 => string 'id' (length=2) 2 => string 'base' (length=4) 

Вы можете использовать implode для получения строки, которую вы просили:

 echo implode(', ', $your_keys); 

вы получите:

 action, id, base 

т.е. список ключей первой подматрицы.

Один лайнер:

 $keys=array_unique(array_reduce(array_map('array_keys',$data),'array_merge',[])); 

Или в функции:

 function get_array_children_keys($data) { return array_unique( array_reduce(array_map('array_keys', $data), 'array_merge', []) ); } 

Теперь давайте разбейте это на примере, вот несколько примеров данных:

 [ ['key1' => 0], ['key1' => 0, 'key2' => 0], ['key3' => 0] ] 

Начиная с самой внутренней функции, мы запускаем array_map с помощью функции array_keys:

 array_map('array_keys', $data) 

Это дает нам ключи от всех дочерних массивов

 [ ['key1'], ['key1', 'key2'], ['key3'] ] 

Затем мы запускаем array_reduce для данных с обратным вызовом array_merge и пустым массивом в качестве начального значения:

 array_reduce(..., 'array_merge', []); 

Это преобразует наши множественные массивы в 1 плоский массив:

 [ 'key1', 'key1', 'key2', 'key3' ] 

Теперь мы выделяем наши дубликаты с помощью array_unique:

 array_unique(...) 

И в итоге все наши ключи:

 [ 'key1', 'key2', 'key3' ] 
 function __getAll2Keys($array_val){ $result = array(); $firstKeys = array_keys($array_val); for($i=0;$i<count($firstKeys);$i++){ $key = $firstKeys[$i]; $result = array_merge($result,array_keys($array_val[$key])); } return $result; } 

попробуйте эту функцию. Он вернется, как вы хотите.

Возможно, вы можете использовать функцию array_map, которая позволяет избежать итерации массива и возвращать массив с необходимыми ключами в качестве значений.

будет так

 $newArray = array_map(function($value){return array_keys($value);},$yourArray); var_dump($newArray); array (size=2) 0 => array (size=9) 0 => string 'action' (length=6) 1 => string 'id' (length=2) 2 => string 'validate' (length=8) 3 => string 'Base' (length=4) 4 => string 'EBase' (length=5) 5 => string 'Qty' (length=3) 6 => string 'Type' (length=4) 7 => string 'Label' (length=5) 8 => string 'Unit' (length=4) 1 => array (size=9) 0 => string 'action' (length=6) 1 => string 'id' (length=2) 2 => string 'validate' (length=8) 3 => string 'Base' (length=4) 4 => string 'FType' (length=5) 5 => string 'Qty' (length=3) 6 => string 'Type' (length=4) 7 => string 'Label' (length=5) 8 => string 'Unit' (length=4) 

С помощью этой функции вы можете получить все ключи из многомерного массива

 function arrayKeys($array, &$keys = array()) { foreach ($array as $key => $value) { $keys[] = $key; if (is_array($value)) { $this->arrayKeys($value, $keys); } } return $keys; }