Объединение массива внутри многомерного массива с тем же ключом

У меня есть следующий массив:

$where = array( 'id'=>array( 12, 13, 14 ), 'date'=>array( '1999-06-12', '2000-03-21', '2006-09-31' ) ); 

Ожидаемый результат:

 $comb = array( array(12, '1999-06-12'), array(13, '2000-03-21'), array(14, '2006-09-31') ); 

Любая идея, почему я не получаю этот ожидаемый результат?

Как заявил Крис Руф в своем удаленном ответе, array_column действительно более изящный способ. Просто не забудьте положить его в какую-то петлю foreach , похожую на то, что показал вам Сахил Гулати. Например, например:

 $result = array(); foreach($where['id'] as $k => $v) { $result[] = array_column($where, $k); } 

Результат var_dump результата $result – это именно то, что вы ищете

 array(3) { [0]=> array(2) { [0]=> int(12) [1]=> string(10) "1999-06-12" } [1]=> array(2) { [0]=> int(13) [1]=> string(10) "2000-03-21" } [2]=> array(2) { [0]=> int(14) [1]=> string(10) "2006-09-31" } } 

Решение 1. Надеемся, что этот простой foreach получит желаемый результат

Попробуйте этот фрагмент кода здесь

 <?php ini_set('display_errors', 1); $where = array('id'=>array(12,13,14),'date'=>array('1999-06-12','2000-03-21','2006-09-31')); $result=array(); foreach($where["id"] as $key => $value) { $result[]=array($value,$where["date"][$key]); } 

Решение 2. Здесь мы используем array_walk для достижения того же результата

Попробуйте этот фрагмент кода здесь

 <?php ini_set('display_errors', 1); $result=array(); $where = array('id'=>array(12,13,14),'date'=>array('1999-06-12','2000-03-21','2006-09-31')); array_walk($where["id"], function($value,$key) use(&$result,&$where){ $result[]=array($value,$where["date"][$key]); }); print_r($result); 

Решение 3. Здесь мы используем array_shift для $where["date"] .

Попробуйте этот фрагмент кода здесь

 <?php ini_set('display_errors', 1); $result=array(); $where = array('id'=>array(12,13,14),'date'=>array('1999-06-12','2000-03-21','2006-09-31')); foreach($where["id"] as $value) { $result[]=array($value, array_shift($where["date"])); } print_r($result); 

Хочешь увидеть причудливый трюк?

( минимальная версия php: 5.6 )

Если вы variadic ключи массива ( id и date ) от $where вы можете использовать variadic функцию и написать хороший жесткий однострочный вкладыш! И вам не нужно беспокоиться о создании экземпляров любых массивов result – никаких проблем. PHP настолько превосходный – большой поклонник.

Входные данные:

 $where=['id'=>[12,13,14],'date'=>['1999-06-12','2000-03-21','2006-09-31']]; 

Метод # 1: variadic array_map () с func_get_args ()

 $comb=array_map(function(){return func_get_args();},...array_values($where)); var_export($comb); 

Этот метод является надежным, поскольку он будет обрабатывать переменное количество «строк» ​​и «столбцов». Вот демонстрация с несколькими примерами .


Или, если вы являетесь суб-5.6, вы можете использовать это, но он менее гибкий / надежный (более буквальный для выборочных данных OP):

Метод №2: array_map () с двумя входами

 $comb=array_map(function($v1,$v2){return [$v1,$v2];},$where['id'],$where['date']); var_export($comb); 

Выход из любого метода:

 array ( 0 => array ( 0 => 12, 1 => '1999-06-12', ), 1 => array ( 0 => 13, 1 => '2000-03-21', ), 2 => array ( 0 => 14, 1 => '2006-09-31', ), ) 

Я считаю, что array_map() является моей любимой функцией для этого случая, потому что он создает массив результатов в той же строке (в противоположность возврату результата true / false, например array_walk (), или используя цикл foreach и печать после его завершения) , Это означает, что вы можете сделать истинную однострочную печать без объявления переменной результата …

 var_export(array_map(function(){return func_get_args();},...array_values($where))); 

или

 var_export(array_map(function($v1,$v2){return [$v1,$v2];},$where['id'],$where['date']));