我正在寻找一种方法来计算数组数组的出现次数。
这是我的阵列:
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,但它似乎不是好方法。
有什么想法吗?
答案 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);