如何在多维数组中对相同的值进行分组?

时间:2010-08-06 13:01:10

标签: php multidimensional-array

如何在多维数组中对相同的值进行分组?

我想要这个

array(
  array('a' => 1, 'b' => 'hello'), 
  array('a' => 1, 'b' => 'world'), 
  array('a' => 2, 'b' => 'you')
)

成为

array(
  array(
    array('a' => 1, 'b' => 'hello'), 
    array('a' => 1, 'b' => 'world')
  ), 
  array('a' => 2, 'b' => 'you')
)

1 个答案:

答案 0 :(得分:1)

function array_gather(array $orig, $equality) {
    $result = array();
    foreach ($orig as $elem) {
        foreach ($result as &$relem) {
            if ($equality($elem, reset($relem))) {
                $relem[] = $elem;
                continue 2;
             }
        }
        $result[] = array($elem);
    }
    return $result;
}

然后

array_gather($arr,
    function ($a, $b) { return $a['a'] == $b['a']; }
);

如果你的所有组都可以减少到一个字符串值(在这种情况下它们可以,但是如果你的内部数组类似于array('a' => ArbitraryObject)那么它们不可能),这可以在一个更有效的问题上实现。 / p>