2009-09-12 7 views
0

J'ai un tableau qui ressemble à ce qui suit:Consolider un tableau en PHP?

Tableau (

[0] => Array 
    (
     [id] => 10 
     [value] => 5 
    ) 

[1] => Array 
    (
     [id] => 10 
     [value] => 1 
    ) 

[2] => Array 
    (
     [id] => 11 
     [value] => 1 
    ) 

[3] => Array 
    (
     [id] => 11 
     [value] => 1 
    ) 

)

Comment puis-je consolider le tableau par id? Le tableau résultant, je suis à la recherche serait quelque chose comme:

Tableau (

[0] => Array 
    (
     [id] => 10 
     [value] => 6 
    ) 

[1] => Array 
    (
     [id] => 11 
     [value] => 2 
    ) 

)

Répondre

2

Ce n'est pas une structure très efficace. Avez-vous envisagé de le consolider sous cette forme?

array 
(
    10 => 6, 
    11 => 2, 
); 

Cela permettrait une recherche rapide des clés sur l'ID.

pour consolider votre premier tableau dans cette forme, il suffit de faire ceci:

$array2 = array(); 
foreach($array1 as $row) 
{ 
    if(isset($array2[$row['id']])) 
     $array2[$row['id']] += $row['value']; 
    else 
     $array2[$row['id']] = $row['value']; 
} 

qui vous donnerait un tableau sous forme de:

$array2 = array 
(
    10 => 6, 
    11 => 2, 
); 

Si vous vraiment besoin dans votre formulaire demandé, une boucle de traitement plus l'obtiendrez là ...

$array3 = array(); 
foreach($array2 as $id => $value) 
{ 
    $array3[] = array('id' => $id, 'value' => $value); 
} 

Alors, voilà!


Et plus compact:

$array2 = array(); 
foreach($array1 as $row) 
    $array2[$row['id']] = (isset($array2[$row['id']]) ? $array2[$row['id']] : 0) + $row['value']; 

$array3 = array(); 
foreach($array2 as $id => $value) 
    $array3[] = array('id' => $id, 'value' => $value); 
Questions connexes