猿问

将列数据的多维数组重组为行数据的多维数组

我具有以下列数据的关联数组:


$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')

);


一只名叫tom的猫
浏览 519回答 3
3回答

不负相思意

解决方案1:希望这个简单的方法foreach能够获得期望的结果<?phpini_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){&nbsp; &nbsp; $result[]=array($value,$where["date"][$key]);}解决方案2:在这里我们array_walk用来达到相同的结果<?phpini_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){&nbsp; &nbsp; $result[]=array($value,$where["date"][$key]);});print_r($result);解决方案3:在这里我们使用array_shifton $where["date"]。<?phpini_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){&nbsp; &nbsp;&nbsp; &nbsp; $result[]=array($value,&nbsp; array_shift($where["date"]));}print_r($result);

qq_花开花谢_0

想看花哨的把戏吗?(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 (&nbsp; 0 =>&nbsp;&nbsp; array (&nbsp; &nbsp; 0 => 12,&nbsp; &nbsp; 1 => '1999-06-12',&nbsp; ),&nbsp; 1 =>&nbsp;&nbsp; array (&nbsp; &nbsp; 0 => 13,&nbsp; &nbsp; 1 => '2000-03-21',&nbsp; ),&nbsp; 2 =>&nbsp;&nbsp; array (&nbsp; &nbsp; 0 => 14,&nbsp; &nbsp; 1 => '2006-09-31',&nbsp; ),)我发现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 = [&nbsp; &nbsp; 'id' => [12,13,14],&nbsp; &nbsp; '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有价值的占位元素的生成。
随时随地看视频慕课网APP
我要回答