2010-01-31 13 views
0

Dans le tableau multidimensionnel ci-dessous, je voudrais fusionner des tableaux qui ont le même merge_id. Je ne suis pas sûr que "fusionner" soit le bon mot: dans l'exemple ci-dessous, array ['0'] devrait devenir array ['0'] avec dans array ['0'] ['0'] et array [' 0 '] [' 1 '], ce dernier étant égal à array [' 1 ']. J'espère que cela a du sens ...php fusionner des tableaux

Le tableau sort de la db triés sur merge_id si les tableaux avec merge_id correspondant sont toujours « à côté de » l'autre, et il n'y aura que jamais 2 avec le même merge_id

En parcourant le tableau, je sais que je dois garder une variable qui est toujours égale au merge_id précédent et s'il y a une correspondance entre le précédent et le courant, alors fusionner.

Array 
(
    [0] => Array 
     (
      [client_id] => 5 
      [company_name] => company111_name 
      [id] => 3 
      [fee] => 111 
      [year] => 2009 
      [quarter] => 3 
      [date_inserted] => 1264948583 
      [description] => 2009 - Q3 


      [fee_type] => 
      [merge_id] => a87ff679a2f3e71d9181a67b7542122c 
      [total_paid] => 0 
      [total_remainder] => 0 
     ) 

    [1] => Array 
     (
      [client_id] => 5 
      [company_name] => company111_name 
      [id] => 6 
      [fee] => 55.5 
      [year] => 2010 
      [quarter] => 2 
      [date_inserted] => 1264949470 
      [description] => 2010 - Q2 


      [fee_type] => 
      [merge_id] => a87ff679a2f3e71d9181a67b7542122c 
      [total_paid] => 0 
      [total_remainder] => 0 
     ) 

    [2] => Array 
     (
      [client_id] => 5 
      [company_name] => company111_name 
      [id] => 4 
      [fee] => 111 
      [year] => 2009 
      [quarter] => 4 
      [date_inserted] => 1264948583 
      [description] => 2009 - Q4 


      [fee_type] => 
      [merge_id] => 
      [total_paid] => 0 
      [total_remainder] => 0 
     ) 



    [3] => Array 
     (
      [client_id] => 5 
      [company_name] => company111_name 
      [id] => 7 
      [fee] => 55.5 
      [year] => 2010 
      [quarter] => 3 
      [date_inserted] => 1264949470 
      [description] => 2010 - Q3 


      [fee_type] => 
      [merge_id] => 
      [total_paid] => 0 
      [total_remainder] => 0 
     ) 

) 

code

$merger = $data['search']['0']['merge_id']; 
      $i = 0; 
      foreach($data['search'] as $fee) 
      { 
       if($fee['merge_id'] == $merger) 
       { 
        //bump up & merge arrays 
        ??? 
       }   

       $merger = $fee['merge_id']; 
       $i++; 
      } 

Répondre

4

Vous pouvez utiliser l'ID comme la clé pour mettre tous les éléments avec le même ID dans le même tableau:

$merged = array(); 
foreach ($data['search'] as $fee) { 
    if ($fee['merge_id'] == '') { 
     continue; 
    } 
    if (!isset($merged[$fee['merge_id']])) { 
     $merged[$fee['merge_id']] = array(); 
    } 
    $merged[$fee['merge_id']][] = $fee; 
} 
$merged = array_values($merged); 

Notez que cela va sauter les éléments avec un ID de fusion vide. Vous pouvez également utiliser un ID de fusion par défaut dans ce cas en remplaçant continue; par $fee['merge_id'] = 0;.

+0

+1 J'aurais dû regarder la "nouvelle publication" avant d'avoir fini d'écrire ma réponse. Spot sur! –

+0

Ok, ça va bien, merci! http://pastebin.com/ma099b52 – stef

1
foreach($array as $p) 
     $result[$p['merge_id']][] = $p;