2010-08-06 39 views
2

如何在多维数组中组合相同的值?如何在多维数组中分组相同的值?

我想这

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') 
) 
+0

就像这样:http://reference.wolfram.com/mathematica/ref/Gather.html? – Artefacto 2010-08-06 13:03:54

+0

我不太了解它。 – Codler 2010-08-06 13:11:35

回答

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)那样他们不能)。

+0

谢谢!它工作完美! – Codler 2010-08-06 13:16:49

+0

我们如何在js中做到这一点? – Deep 2017-01-20 11:50:39