PHP 计算多维数组中的值,其中键和值等于

PHP count values in multidimensional-array where key and value equals

我正在尝试创建一个仪表板,其中包含一些信息,例如有多少用户是男性或女性。我已经将配置文件信息存储在一个名为 'users' 的多维数组中。要计算 male/female 用户总数,我想使用具有多个参数的函数(数组、键和值。

我尝试了以下代码:

  <?
    function countArray($array, $key, $value) {
      $cnt = count(array_filter($array,function($element) {
        return $element[$key]== $value;
      }));
      echo $cnt;
    }

    countArray($users, 'gender', '1');
  ?>

这导致未定义的变量:key/values。我做错了什么?

尝试

function($element) use ($key, $value) {

问题是 PHP 中的匿名函数无法访问其自身范围之外的变量。因此,您提供的 array_filter() 回调函数不知道 $key$value,因此它们是该函数范围内的未定义变量。要解决此问题,您必须使用 use 关键字将外部变量显式传递到函数作用域中,例如 function() use ($external_variable) {}.

对于您的情况,解决方案如下所示:

<?
    function countArray($array, $key, $value) {
      $cnt = count(array_filter($array,function($element) use ($key, $value) {
        return $element[$key]== $value;
      }));
      echo $cnt;
    }

    countArray($users, 'gender', '1');
?>

如果您使用的是 PHP 7.4 或更高版本,您也可以只使用箭头函数来允许外部作用域隐式成为函数作用域的一部分:

<?
    function countArray($array, $key, $value) {
      $cnt = count(array_filter($array,fn($element) => $element[$key]== $value ));
      echo $cnt;
    }

    countArray($users, 'gender', '1');
?>