1

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

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

3 回答 3

3

解决方案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);
于 2017-05-13T02:53:25.343 回答
3

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

$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"
  }
}
于 2017-05-13T03:02:00.833 回答
1

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

代码:(演示

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

对于真正需要动态解决方案的任何人(因为行数可能会波动/变化,并且您不想继续维护处理代码),那么我建议您检查我的答案的版本历史记录

于 2017-05-13T07:35:22.663 回答