2009-09-12 55 views
0

我有一个数组,看起来像下面这样:在PHP中整合数组?

阵列(

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

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

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

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

我怎样才能巩固按id的阵列?结果数组我要找会是这样的:

阵列(

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

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

回答

2

这并不是一个非常有效的结构。你有没有考虑以这种形式巩固它?

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

这将允许快速键在ID上查找。

巩固你的第一个数组转换成这种形式,只是这样做:

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

这将使你在形式的数组:

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

如果你真的需要它你所要求的形式,多一个处理循环会得到它...

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

所以,你去!


,更紧凑:

$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);