2010-08-06 6 views
2

Comment regrouper les mêmes valeurs dans un tableau multidimention?Comment regrouper les mêmes valeurs dans un tableau multidimention?

Je veux que ce

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

pour devenir

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

Quelque chose comme ceci: http://reference.wolfram.com/mathematica/ref/Gather.html? – Artefacto

+0

Je n'ai pas compris grand-chose. – Codler

Répondre

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; 
} 

puis

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

Cela pourrait être mis en œuvre dans une affaire plus efficace si tous vos groupes pourraient être réduits à une valeur de chaîne (dans ce cas, le Vous pouvez, mais si vos tableaux internes étaient quelque chose comme array('a' => ArbitraryObject) ils ne pouvaient pas être).

+0

Merci! Cela fonctionne parfait! – Codler

+0

Comment pouvons-nous faire cela en js ?? – Deep

Questions connexes