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

Restructure multidimensional array of column data into multidimensional array of row data

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

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

解决方案一:希望这个简单的foreach得到想要的结果

Try this code snippet here

<?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]);
}

方案二:这里我们使用array_walk来达到同样的效果

Try this code snippet here

<?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: 这里我们在 $where["date"].

上使用 array_shift

Try this code snippet here

<?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);

正如 Kris Roofe 在他删除的答案中所说的那样,array_column 确实是一种更优雅的方式。请务必将其放入某种 foreach 循环中,类似于 Sahil Gulati 向您展示的内容。例如,像这样:

$result = array();

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

$resultvar_dump 输出正是您要查找的内容

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"
  }
}

我已经完全重写了我的答案,因为它不必要地膨胀了这个页面。事实上,有一种非常干净和原生的方式来处理这个“转置”的特定任务。只需要使用 null 作为函数参数并传入输入数组中的两个已知行即可。

代码:(Demo)

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

var_export(
    array_map(null, $where['id'], $where['date'])
);

输出:

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

对于真正需要动态解决方案的人(因为行数可能 fluxuate/change 而你不想继续维护处理代码),那么我建议你检查 the version history of my answer .