如何在PHP中对数组进行分组?

时间:2012-11-27 20:04:56

标签: php arrays

如何通过houseid对此数组进行分组?

Array
(
    [0] => stdClass Object
        (
            [id] => 1111
            [houseid] => 58
            [price] => 2995
        )

    [1] => stdClass Object
        (
            [id] => 1112
            [houseid] => 58
            [price] => 4050
        )

    [2] => stdClass Object
        (
            [id] => 1114
            [houseid] => 60
            [price] => 1695
        )

    [3] => stdClass Object
        (
            [id] => 1115
            [houseid] => 60
            [price] => 2250
        )

    [4] => stdClass Object
        (
            [id] => 1116
            [houseid] => 60
            [price] => 2295
        )
)

我需要计算一个houseid的总价格并做一些数学/条件,如果这个阵列组很容易...

我可以将此数组格式化为

Array
(
    [58] => stdClass Object(
        [0] => stdClass Object
        (
            [id] => 1111
            [price] => 2995
        )
        [1] => stdClass Object
        (
            [id] => 1112
            [houseid] => 58
            [price] => 4050
        )
    )
    [60] => stdClass Object(
        [0] => stdClass Object(
            [id] => 1114
            [price] => 1695
        )
        [1] => stdClass Object
        (
            [id] => 1115
            [price] => 2250
        )
        [2] => stdClass Object
        (
            [id] => 1116
            [price] => 2295
        )
)

或者任何人都可以建议我,如何循环原始数组来计算一个房子的总价?

1 个答案:

答案 0 :(得分:3)

您可以使用array_reduce

$data = array_reduce($data, function ($a, $b) {
    $id = $b->houseid;
    unset($b->houseid);
    $a[$id][] = $b;
    return $a;
});

var_dump($data);

输出

array (size=2)
  58 => 
    array (size=2)
      0 => 
        object(stdClass)[1]
          public 'id' => int 1111
          public 'price' => int 2995
      1 => 
        object(stdClass)[2]
          public 'id' => int 1112
          public 'price' => int 4050
  60 => 
    array (size=3)
      0 => 
        object(stdClass)[3]
          public 'id' => int 1114
          public 'price' => int 1695
      1 => 
        object(stdClass)[4]
          public 'id' => int 1115
          public 'price' => int 2250
      2 => 
        object(stdClass)[5]
          public 'id' => int 1116
          public 'price' => int 2295

Full live Demo