【问题标题】:Transforming multidimensional arrays转换多维数组
【发布时间】:2016-02-19 00:39:21
【问题描述】:

作为构建一些用于构建依赖下拉列表的 json 的垫脚石,我想转换这个数组...

Array
(
    [0] => Array
        (
            [id] => 4
            [project_id] => 2289
            [task] => Drawing
        )

    [1] => Array
        (
            [id] => 5
            [project_id] => 2289
            [task] => Surveying
        )

    [2] => Array
        (
            [id] => 6
            [project_id] => 2289
            [task] => Meeting
        )

    [3] => Array
        (
            [id] => 1
            [project_id] => 2282
            [task] => Folding
        )

    [4] => Array
        (
            [id] => 2
            [project_id] => 2282
            [task] => Printing
        )

    [5] => Array
        (
            [id] => 3
            [project_id] => 2282
            [task] => Cutting
        )

)

..到这样的事情...

Array
(
  [0] = Array
        (
        [project_id] => 2289
        [task] => Array
                  (
                  [0] => Drawing
                  [1] => Surveying
                  [2] => Meeting
                  )
        )
  [1] = Array
        (    
        [project_id] => 2282
        [task] => Array
                  (
                  [0] => Folding
                  [1] => Printing
                  [2] => Cutting
                  )
        )

)

使用...

$newArray = array();
foreach ($array as $row)
{
   $newArray[$row['project_id']][] = $row['task'];
}

...我可以得到这个...

Array
(
    [2289] => Array
        (
            [0] => Drawing
            [1] => Surveying
            [2] => Meeting
        )

    [2282] => Array
        (
            [0] => Folding
            [1] => Printing
            [2] => Cutting
        )

)

...但我忘记了如何在结果中包含关联键

【问题讨论】:

  • 你必须把project_id分开的组,它需要是唯一的,你已经可以了

标签: php arrays


【解决方案1】:

您可以简单地使用 index 修改您的 foreach

$newArray = array();
$index = array();
foreach ($array as $row)
{
    $found = array_search( $row['project_id'], $index );
    if( $found === False )
    {
        $found = array_push( $newArray, array( 'project_id' => $row['project_id'] ) )-1;
        $index[$found] = $row['project_id'];
    }
    $newArray[ $found ]['task'][] = $row['task'];
}

eval.in demo

当找到一个新的project_id 键时,它被添加到$index 数组中,所以——在下一个循环中搜索它——我可以检索对应的多维数组的索引。

【讨论】:

  • 执行迭代的array_search() 调用不是好的做法。
【解决方案2】:

您可以随意分配它们,将project id 放在索引中,然后task 不断将其推到那里:

$newArray = array();
foreach ($array as $row) {
   $newArray[$row['project_id']]['project_id'] = $row['project_id'];
   $newArray[$row['project_id']]['task'][] = $row['task'];
}
$newArray = array_values($newArray); // reindex
// removes `$row['project_id']` on each group

注意:只需使用array_values 重置您在project id 分组中使用的分组密钥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2019-06-29
    • 2012-08-15
    相关资源
    最近更新 更多