У меня есть 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);