在匹配元素上添加PHP数组

时间:2011-07-28 16:30:06

标签: php arrays

我需要一个可以添加具有匹配元素的x数组元素的函数。

以下是具有两个元素的源数组的示例。

Array
(
    [0] => Array
        (
            [0] => Array
                ([kwh] => 313.9799,[time_read] => 1311825600)

            [1] => Array
                ([kwh] => 312.3098,[time_read] => 1311826500)

            [2] => Array
                ([kwh] => 302.0525,[time_read] => 1311827400)

            [3] => Array
                ([kwh] => 312.2946,[time_read] => 1311828300)
        )
    [1] => Array
        (
            [0] => Array
                ([kwh] => 723.4205,[time_read] => 1311825600)

            [1] => Array
                ([kwh] => 686.9258,[time_read] => 1311826500)

            [2] => Array
                ([kwh] => 714.3203,[time_read] => 1311827400)

            [3] => Array
                ([kwh] => 707.8232,[time_read] => 1311828300)
        )
)

我希望看到以下输出。抛出我的是数组的索引可能不匹配。一个数组可能有10个元素,而另一个数组可能有20个。必须使用time_read值来查找匹配的数组元素。

    Array
        (
            [0] => Array
                ([kwh] => 1036,[time_read] => 1311825600)

            [1] => Array
                ([kwh] => 998,[time_read] => 1311826500)

            [2] => Array
                ([kwh] => 1016,[time_read] => 1311827400)

            [3] => Array
                ([kwh] => 1019,[time_read] => 1311828300)
        )

1 个答案:

答案 0 :(得分:4)

使用时间戳作为数组键,使用嵌套循环来获取内部值并将其添加

$output = array();
foreach ($source_array as $group) {
  foreach ($group as $a) {
    if (!isset($output[$a['time_read']]))
      $output[$a['time_read']] = array('time_read'=>$a['time_read'], 'kwh'=>0);
    $output[$a['time_read']]['kwh'] += $a['kwh'];
  }
}

print_r($output);
/* output

Array
    (
        [1311825600] => Array
            ([kwh] => 1036,[time_read] => 1311825600)

        [1311826500] => Array
            ([kwh] => 998,[time_read] => 1311826500)

        [1311827400] => Array
            ([kwh] => 1016,[time_read] => 1311827400)

        [1311828300] => Array
            ([kwh] => 1019,[time_read] => 1311828300)
    ) */

也很好,因为你可以使用ksort按时间顺序排序