У меня есть следующий массив:
$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);
Если вы удалите ключи массива (id
а также date
) от $where
Вы можете использовать variadic
работай и пиши миленькую однострочку! И вам не нужно беспокоиться о создании каких-либо result
массивы — без суеты. PHP такой отличный — большой поклонник.
Входные данные:
$where=['id'=>[12,13,14],'date'=>['1999-06-12','2000-03-21','2006-09-31']];
Метод № 1: переменная 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']));