3 回答
TA贡献1777条经验 获得超10个赞
解决方案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_shifton $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);
TA贡献1835条经验 获得超7个赞
想看花哨的把戏吗?
(PHP最低版本:5.6)
如果您从中剥离阵列键(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()这是我最喜欢的函数,因为它在同一行中创建了结果数组(而不是像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']));
想看到“幻想”变成“精神幻想”吗?
(演示)
$where = [
'id' => [12,13,14],
'date'=>['1999-06-12','2000-03-21','2006-09-31']
];
var_export(array_map(null, ...array_values($where)));
与上面相同的效果,只是语法更简洁。
如果有人试图决定要为自己的项目使用哪种解决方案,那么Alex的迭代array_column()调用将比IMO的Sahil的调用更好,因为它更加灵活/健壮(不需要对所有列名进行硬编码),如果您的输入数组具有变量,则可以立即展开专栏,并且总体上更具简洁性和表现力。
为此,我的最后一个代码片段(schmancy)也适用于可变的输入大小,并且非常简洁。Alex和我的之间的主要区别是null有价值的占位元素的生成。
添加回答
举报