我需要在数据集中获得不同的雕像。我希望这很简单,我创建一个$statuses
数组,遍历数据并增加status
中每个$statuses
的计数。这就是我所做的:
$data = array(
array('status'=>'a'),
array('status'=>'b'),
array('status'=>'c'),
array('status'=>'c'),
array('status'=>'c'),
array('status'=>'c'),
array('status'=>'c'),
array('status'=>'c'),
array('status'=>'c'),
array('status'=>'b'),
array('status'=>'b'),
array('status'=>'a'),
array('status'=>'a'),
array('status'=>'a'),
);
$statuses = array();
foreach($data as $row) {
if(!in_array($row['status'], $statuses)) {
$statuses[$row['status']] = 0;
}
$statuses[$row['status']] += 1;
}
var_dump($statuses);
结果:
array(3) { ["a"]=> int(1) ["b"]=> int(1) ["c"]=> int(1) }
我可以想到其他一些方法来实现这一点,但我太好奇了:为什么我的状态不会在这里递增?我还尝试了其他一些增量方法,但这并不重要:
$statuses[$row['status']]++;
++$statuses[$row['status']];
$statuses[$row['status']] = $statuses[$row['status']] + 1;
一切都是一样的。
我努力寻找类似的问题,我发现的大多数结果都是"我如何循环"或其他不相关的。任何有关标题的帮助也将不胜感激。
答案 0 :(得分:3)
您可以使用一些内置函数:
$result = array_count_values(array_column($data, 'status'));
注意:in_array
会查找值,而不是键。查找键的功能是array_key_exists
答案 1 :(得分:1)
in_array($row['status'], $statuses)
没有做到你期望的事情(因为它会搜索价值观 - 请参阅@ trincot'答案)。
您可以将条件更改为
if(!isset($statuses[$row['status']])) {
$statuses[$row['status']] = 0;
}
并且您将获得所需的结果:
array(3) {
["a"]=>int(4)
["b"]=>int(3)
["c"]=>int(7)
}