【问题标题】:Compress a multidimensional array in PHP?在 PHP 中压缩多维数组?
【发布时间】:2016-02-14 17:22:45
【问题描述】:

我确实有一个名为 $output 的数组。如果我执行以下操作...

<?php
print_r($output);
?>

...数组的内容看起来像这样...

Array ( [id] => 116 [the_key] => monday    [value] => 0 )
Array ( [id] => 116 [the_key] => tuesday   [value] => 1 )
Array ( [id] => 116 [the_key] => wednesday [value] => 0 )
Array ( [id] => 133 [the_key] => monday    [value] => 0 )
Array ( [id] => 133 [the_key] => tuesday   [value] => 1 )
Array ( [id] => 133 [the_key] => wednesday [value] => 0 )
Array ( [id] => 127 [the_key] => monday    [value] => 0 )
Array ( [id] => 127 [the_key] => tuesday   [value] => 0 )
Array ( [id] => 127 [the_key] => wednesday [value] => 0 )

...但我希望将内容做成这样的形式...

Array ( [id] => 116 [monday] => 0 [tuesday] => 1 [wednesday] => 0)
Array ( [id] => 133 [monday] => 0 [tuesday] => 1 [wednesday] => 0)
Array ( [id] => 127 [monday] => 0 [tuesday] => 0 [wednesday] => 0)

有什么方法可以在不循环一百万次的情况下做到这一点吗?

【问题讨论】:

  • 显示$output 在您的代码中是如何形成的

标签: php arrays algorithm


【解决方案1】:

我不知道这是否属于“循环一百万次”,但为什么不尝试按id 对项目进行分组?

$newArray = array();

for($i = 0; $i < sizeof($output); $i++) {
    $curr = $output[$i];
    $id = $curr["id"];
    $day = $curr["the_key"];
    $value = $curr["value"];
    if(array_key_exists($id, $newArray)) {
        $newArray[$id][$day] = $value;
    } else {
        $newArray[$id] = array($day => $value);
    }
}

据我所知,$newArray 应该满足您的要求。

【讨论】:

  • 当 OA 请求包含项目 id, dayname, value?顺便说一句:我建议您使用带有 key = id 的数组数组的解决方案。使用阵列时这不会是一个缺点。并且可以一次性创建新数组。
  • @hherger 确实如此。我将对其进行编辑以进行更改,但重点是算法已经存在,并且由于某种原因,提问者甚至没有考虑手动重新排列数组。
猜你喜欢
  • 2015-12-31
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2022-11-15
  • 2020-12-07
  • 2011-09-20
相关资源
最近更新 更多