如何在多维数组中计算相同的值?

时间:2016-12-31 13:13:59

标签: php arrays multidimensional-array

这里我有一个数组。就是这样:

Array ( Array (
     'name' => 'bmw',
     'id' => 1
 ), Array (
     'name' => 'toyota',
     'id' => 1
 ),Array ( 
     'name' => 'tata',
     'id' => 2 
 ),Array ( 
     'name' => 'bajaj',
     'id' => 3
 ),Array (
     'name' => 'kawasaki',
     'id' => 3
 ), Array (
     'name' => 'tvs',
     'id' => 3
 ),Array (
     'name' => 'mitsubishi',
     'id' => 2
 )
);

以及接下来应该是什么代码给我结果为id 1 => 2项,id 2 => 2项和id 3 => 3项? 我试过array_count_values()但它对我没用。

3 个答案:

答案 0 :(得分:0)

根据文档array_count_values仅适用于字符串和整数。您可以使用它,但首先应该使用ID提取列。从PHP 5.5开始,它非常简单,只需调用一个名为array_column的函数。

$list = array ( Array (
     'name' => 'bmw',
     'id' => 1
 ), Array (
     'name' => 'toyota',
     'id' => 1
 ),Array ( 
     'name' => 'tata',
     'id' => 2 
 ),Array ( 
     'name' => 'bajaj',
     'id' => 3
 ),Array (
     'name' => 'kawasaki',
     'id' => 3
 ), Array (
     'name' => 'tvs',
     'id' => 3
 ),Array (
     'name' => 'mitsubishi',
     'id' => 2
 )
);

$results = array_count_values(array_column($list, 'id'));

答案 1 :(得分:0)

也许有一个更好的解决方案,但这应该有用。

假设您的数组已保存在$arr

$countItemsById = [];

foreach( $arr as $data ){
  $countItemsById[ $data['id'] ]++;
}

此代码执行以下操作: 首先,它正在创建一个新的数组$countItemsById。 之后,它循环通过现有数组,并将具有id值的index (key)的新数组值增加1。

之后,$countItemsById将如下所示:

Array (1 => 2, 2 => 2, 3 => 3)

答案 2 :(得分:0)

循环你的数组,计算每个id的occerence。

<?php
$list = array ( Array (
     'name' => 'bmw',
     'id' => 1
 ), Array (
     'name' => 'toyota',
     'id' => 1
 ),Array (
     'name' => 'tata',
     'id' => 2
 ),Array (
     'name' => 'bajaj',
     'id' => 3
 ),Array (
     'name' => 'kawasaki',
     'id' => 3
 ), Array (
     'name' => 'tvs',
     'id' => 3
 ),Array (
     'name' => 'mitsubishi',
     'id' => 2
 )
);

$results = [];
array_walk($list, function($v) use(&$results){
  $results[$v['id']]++;
});
var_dump($results);

输出:

array(3) {
  [1]=>
  int(2)
  [2]=>
  int(2)
  [3]=>
  int(3)
}