Массив PHP с неизвестным числом параметров

У меня есть PHP-массив, похожий на это:

$array['my_data']['value'] = 'some value'; $array['my_own_data']['value'] = 'another value'; $array['different_data']['value'] = 'another value'; 

Мне нужно использовать array_merge в PHP или такой. Проблема в том, что количество ключей первого уровня неизвестно. Это может быть 150 предметов, я не знаю.

Это не сработает для меня из-за неизвестного количества ключей:

 array_merge($array['my_data'], $array['my_own_data'], $array['different_data']); 

Нужен ли мне цикл или есть что-то интересное?

Это может сделать, если это то, что вы хотите:

 $array = array_map('current', $array); 

или, возможно,

 $array = array_map(function ($a) { return $a['value']; }, $array); 

Это должно дать вам

 array('some value', 'another value', 'another value') 

Проблема в том, что количество ключей первого уровня неизвестно. Это может быть 150 предметов, я не знаю.

Это проблема, которую легко решить.

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

 $numberOfKeysOfTheFirstLevel = count($array); 

Там вы знаете номер сейчас. Если вам действительно нужны их имена, вы также можете сделать это:

 $keyNamesOfTheFirstLevel = array_keys($array); 

Итак, вы продолжали в своем вопросе:

Это не сработает для меня из-за неизвестного количества ключей: array_merge($array['my_data'], $array['my_own_data'], $array['different_data']);

Хорошей новостью является то, что вам не нужно знать количество ключей для выполнения операции array_merge :

 call_user_func_array('array_merge', $array); 

Поэтому в отношении того, о чем вы писали в своем вопросе, это должно ответить на него. Однако результат может быть не таким, как вы ожидали. См. Другие ответы, пожалуйста, и, пожалуйста, спросите .

Попробуйте следующее:

 $new_array = array(); foreach($array as $item) { $new_array[] = $item['value']; }; 
 // 1. your array should have different keys, otherwise it will have no effect $array['my_data']['value1'] = 'some value'; $array['my_own_data']['value2'] = 'another value'; $array['different_data']['value3'] = 'another value'; $result = call_user_func_array('array_merge', $array); 

вернется

 array( 'value1' => 'some value', 'value2' => 'another value', 'value3' => 'another value', ) 

В противном случае, вы хотели чего-то подобного?

 array( 'value' => array('some value', 'another value', 'another value') ) 

Тогда вы могли бы сделать

 $array['my_data']['value'] = 'some value'; $array['my_own_data']['value'] = 'another value'; $array['different_data']['value'] = 'another value'; $result = array(); // PHP <= 5.2 array_walk($array, create_function('&$item, $key, &$dest', ' foreach ((array) $item as $subKey => $value) { if (!isset($dest[$subKey])) { $dest[$subKey] = array(); } $dest[$subKey][] = $value; } '), & $result); var_export($result); 

Если я понимаю, что вы хотите, вы можете использовать array_map .

Изменить:

 $a = array(); $a['x']['value'] = 1; $a['y']['value'] = 3; $a['z']['value'] = 3; 

в:

 array(3) { ["x"]=> int(1) ["y"]=> int(2) ["z"]=> int(3) } 

Вы можете определить функцию:

 function f($x) { return $x['value'];} 

и используйте array_map :

 $b = array_map(f, $a); 
 array_map(function($a){ return $a['value']; },$array); 

для php5.2 и старше:

 function stuff($a){ return $a['value']; } array_map('stuff',$array);