PHP使用单独的数组递增值的实例

时间:2018-01-06 23:31:01

标签: php arrays

我需要在数据集中获得不同的雕像。我希望这很简单,我创建一个$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;

一切都是一样的。

我努力寻找类似的问题,我发现的大多数结果都是"我如何循环"或其他不相关的。任何有关标题的帮助也将不胜感激。

2 个答案:

答案 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)
}

小提琴:https://3v4l.org/MLUgK