У меня есть следующий массив:
$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']));