2012-07-24 57 views
0

的价值我有一个数组,看起来像这样PHP基于特定元素

Array ( 

[0] => Array 
     (
      [id] => 123 
      [count] => 1 
     ) 

    [1] => Array 
     (
      [id] => 123 
      [count] => 3 
     ) 

    [2] => Array 
     (
      [id] => 513 
      [count] => 0 
     ) 
    [3] => Array 
     (
      [id] => 561 
      [count] => 1 
     ) 
    [4] => Array 
     (
       [id] => 613 
       [count] => 7 
     ) 

) 

我想要做的就是创建一个新的数组什么组合阵列,即总计其中ID值相同的次数。因此,例如,新阵列看起来像这样:

Array ( 

[0] => Array 
     (
      [id] => 123 
      [count] => 4 
     ) 

    [1] => Array 
     (
      [id] => 513 
      [count] => 0 
     ) 
    [2] => Array 
     (
      [id] => 561 
      [count] => 1 
     ) 
    [3] => Array 
     (
       [id] => 613 
       [count] => 7 
     ) 

) 

有人会知道一个很好的方法来做到这一点吗?

谢谢!

+0

只是迭代并创建一个新的数组,如果id与先前的id相同(保存)并添加计数,但我觉得必须有更好的方法 – dzm 2012-07-24 20:46:48

回答

0

短而简单:

$new_array = array(); 

foreach($data_array as $value) { 
    if(array_key_exists($value['id'], $new_array)) { 
     $new_array[$value['id']] += $value['count']; 
    } else { 
     $new_array[$value['id']] = $value['count']; 
    } 
} 

echo print_r($new_array,true); 

我做了id => value,因为似乎没有需要另一个阵列数据时id可以b e用作数组的键。

0

任何理由,你为什么不能做的id => count

+0

嗯,实际数组中有更多的值 – dzm 2012-07-24 20:46:09

0

一个关联数组,你可以用下面的函数做到这一点(我没有测试的代码,但它应该工作):

function get_count_array($arr) { 
    $new_array = array(); 

    foreach($arr as $item) { 
     $found = false; 

     //loop through all the current new items to check if we already have it 
     for($i = 0; $i < count($new_array); $i++) { 
      //do we have it? 
      if($new_array[$i]['id'] == $item['id']) { 
       $new_array[$i]['count'] += 1; 
       $found = true; 

       break; 
      } 
     } 

     if(!$found) { 
      $new_array[] = array('id' => $item['id'], 'count' => 0); 
     } 
    } 

    return $new_array; 
}