2011-12-07 2 views
2

Je te suit $array:comment grouper des tableaux basés sur une valeur en php?

Array 
(
[0] => Array 
    (
     [cd] => 1675 
     [amt_1] => 199.50 
     [fname] => Joe 
     [lname] => A 
    ) 

[1] => Array 
    (
     [cd] => 1675 
     [amt_1] => 69.90 
     [fname] => Joe 
     [lname] => A 
    ) 

[2] => Array 
    (
     [cd] => 1676 
     [amt_1] => 69.90 
     [fname] => Tracy 
     [lname] => A 
    ) 

[3] => Array 
    (
     [cd] => 1676 
     [amt_1] => 199.50 
     [fname] => Tracy 
     [lname] => A 
    ) 
... 
) 

Je suis en train de faire est de les regrouper, dans ce cas, par fname ou cd de sorte que je vais avoir quelque chose comme:

[0] => Array 
    (
     [cd] => 1676 
     Array 
      (
      [0] => Array 
       (
       [amt_1] => 199.50 
       ) 
      [1] => Array 
       (
       [amt_1] => 69.90 
       ) 
     [fname] => Joe 
     [lname] => A 
    ) 
    [1] => Array 
    (
     [cd] => 1676 
     Array 
      (
      [0] => Array 
       (
       [amt_1] => 199.50 
       ) 
      [1] => Array 
       (
       [amt_1] => 69.90 
       ) 
     [fname] => Tracy 
     [lname] => A 
    ) 
    ........ 

I ne peut pas sembler comprendre. Cela ne peut pas être fait dans mysql, je dois le faire en PHP.

Des idées?

Merci

modifier: Je sais que l'exemple de résultat est pas formaté correctement, mais fondamentalement je veux combiner les fname et le reste des résultats placer dans des tableaux.

modifier:

@Paulo H a une bonne idée. aussi je l'ai trouvé une autre façon de le faire que les groupes il ne combinant ensemble:

$groups = array(); 
    foreach ($the_array as $item) { 
     $key = $item ['fname']; 
     if (! isset ($groups [$key])) { 
      $groups [$key] = array ('items' => array ($item), 'count' => 1); 
     } else { 
      $groups [$key] ['items'] [] = $item; 
      $groups [$key] ['count'] += 1; 
     } 
    } 
+0

Qu'en est-Tracy? –

+0

Tracy aussi, je viens de donner un exemple – Patrioticcow

+0

Votre tableau de résultats désiré est mal formé. Que contient le tableau 'array (0 => array ('amt_1' => 199.50 '), 1 => array (' amt_1 '=> 69.90))'? Et comment Tracy pourrait-elle y regarder? – Shad

Répondre

1

Essayez ceci:

function &array_group_value_by($input_array,$value,$by){ 
    $result = array(); 
    foreach($input_array as $array){ 
     if(!isset($result[$array[$by]])){ 
      $result[$array[$by]] = array(); 
     } 
     foreach($array as $key=>$data){ 
      if((is_string($value) && $key==$value) || (is_array($value) && in_array($key,$value))){ 
       if(!isset($result[$array[$by]][$key])){ 
        $result[$array[$by]][$key] = array(); 
       } 
       $result[$array[$by]][$key][] = $data; 
      }else{ 
       $result[$array[$by]][$key] = $data; 
      } 
     } 
    } 
    return $result; 
} 

$grouped = array_group_value_by($yourarray,'amt_1','fname'); 
print_r($grouped); 
+0

genre de travaux, j'ai changé quelques choses, et merci fir l'idée – Patrioticcow

Questions connexes