计算多个PHP数组的出现次数

时间:2014-02-26 15:40:09

标签: php arrays counting

我正在寻找一种方法来计算数组数组的出现次数。

这是我的阵列:

Array
(
[0] => Array
    (
        [id] => 671
        [title] => BIEND
        [img] => 
        [ville] => marseille
    )

[1] => Array
    (
        [id] => 670
        [title] => BIENC
        [img] => 
        [ville] => avignon
    )

[2] => Array
    (
        [id] => 669
        [title] => BIENB
        [img] => 
        [ville] => avignon
    )

)

我想要的是:

Array
(
[avignon] => 2
[marseille] => 1
)

我尝试使用array_count_values,但它似乎不是好方法。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

你可以手动完成它:

$result = array();
foreach($input as $item) 
{
  $result[$item['ville']]++;
}

或者,或许稍微好一些,

$result = array();
foreach($input as $item) 
{ 
  $city = $item['ville'];
  if(!array_key_exists($city, $result)) {
    $result[$city] = 1;
  } else {
    $result[$city]++;
  }
}

或者,你可以做一些array_map魔法来首先获得一个包含所有城市的数组,然后按照你的计划使用array_count_values:

$cities = array_count_values( array_map( function($a) { return $a['ville']; } ) );

注意,我还没有测试过这个最后的解决方案,我个人认为第一个解决方案表达的意图更好。如果你想使用这个,因为它更短(即可读性更低),我会留给你调试和评论

答案 1 :(得分:1)

您可以使用array_reduce()

$data = Array
(
0 => Array
    (
        'id' => 671,
        'title' => 'BIEND',
        'img' => '',
        'ville' => 'marseille'
    )
,
1 => Array
    (
        'id' => 670,
        'title' => 'BIENC',
        'img' => '',
        'ville' => 'avignon'
    )
,
2 => Array
    (
        'id' => 669,
        'title' => 'BIENB',
        'img' => '',
        'ville' => 'avignon'
    )

);

$result = array_reduce($data, function(&$cur, $x)
{   
   $cur[$x['ville']] = isset($cur[$x['ville']])?$cur[$x['ville']]+1:1;
   return $cur;
}, []);

答案 2 :(得分:0)

$my_array = array(...);
$result = array();

foreach ($my_array as $arr) {
    $key = $arr['ville'];
    if (! array_key_exists($key, $result){
        $result[$key] = 1;
        continue;
    }
    $result[$key] += 1;
}

答案 3 :(得分:-1)

我会写这样的东西。应根据内容重命名Array和subArray。

   $villes = array();

   foreach($yourArray as $subArray) {
       if(!in_array($subArray['ville'], $villes)) {
           $villes[$subArray['ville']] = 1;
       } else {
           $villes[$subArray['ville']]++;
       }
   }

   var_dump($villes);