2009-12-07 3 views
0

je la question suivante, j'ai un tableau avec le nom de données $Compter une élimination des valeurs associatives en double dans un tableau

Dans ce tableau, j'ai quelque chose comme

[6] => Array 
     (
      [code] => 642 
      [total] => 1708 
     ) 

    [7] => Array 
     (
      [code] => 642 
      [total] => 53 
     ) 

    [8] => Array 
     (
      [code] => 642 
      [total] => 1421 
     ) 

Dans certains éléments du code la valeur est la même, maintenant ce que je veux faire est de fusionner tous les éléments avec la même valeur de code et d'additionner les totaux. J'ai essayé de le faire dans une boucle foreach, mais cela ne semble pas fonctionner.

je fais quelque chose comme ça

$old_lc = null; 
     $old_lcv = 0; 
     $count = 0; 
     $dd = null; 


     foreach($data as $d){ 

      if($d['code'] == $old_lc){ 
       $d['total'] = $d['total'] + $old_lcv; 
       $count--; 
       $dd[$count]['code'] = $d['code']; 
       $dd[$count]['total'] = $d['total']; 

      }else{ 
       $dd[$count]['code'] = $d['code']; 
       $dd[$count]['total'] = $d['total']; 
       $count++; 

      } 

      $old_lc = $d['code']; 
      $old_lcv = $d['total']; 
     } 

     $data = $dd; 

Mais cela ne semble pas fonctionner. Je dois aussi le tableau de données $ pour garder les clés, et doit rester dans le même format

Répondre

2

Ce code se traduit par le tableau ci-dessus dans un tableau de code => total. Il est à noter que sur certains paramètres, cela va générer un avertissement sur les index indéfinis. Si cela vous dérange, vous pouvez utiliser cette version alternative:

$out = array(); 
foreach ($data as $k => $v) { 
    if (array_key_exists($v['code'], $out)) { 
    $out[$v['code']] += $v['total']; 
    } else { 
    $out[$v['code']] = $v['code']; 
    } 
} 

Ce qu'il se retourne en quelque chose comme l'original, si c'est ce que vous voulez:

$output = array(); 
foreach ($out as $code => $total) { 
    $output[] = array('code' => $code, 'total' => $total); 
} 

Note: les clés d'origine de $data ne sont pas conservés, mais il n'a pas été indiqué que c'était une exigence. Si c'est le cas, il faut spécifier comment reconstruire plusieurs éléments qui ont le même code.

3
$result = array(); 
    foreach($ary as $elem) { 
    $code = $elem['code']; 
    $total = $elem['total']; 
    if(!isset($result[$code])) 
      $result[$code] = 0; 
    $result[$code] += $total; 
    } 
0
 
    [6] => Array 
     (
      [code] => 642 
      [total] => 1708 
     ) 

    [7] => Array 
     (
      [code] => 642 
      [total] => 53 
     ) 

    [8] => Array 
     (
      [code] => 642 
      [total] => 1421 
     ) 

 
$data_rec = array(); 
$data = array(); 
foreach($data_rec as $key=>$rec) 
{ 
    $data[$key]+= $rec[$key]; 
} 
print_r($data); 
Questions connexes