当前位置: 首页 > 面试题库 >

如何在PHP数组中递归运行array_filter?

姬歌者
2023-03-14
问题内容

给定以下数组 $mm

Array
(
    [147] => Array
        (
            [pts_m] => 
            [pts_mreg] => 1
            [pts_cg] => 1
        )    
    [158] => Array
        (
            [pts_m] => 
            [pts_mreg] => 
            [pts_cg] => 0
        )

    [159] => Array
        (
            [pts_m] => 
            [pts_mreg] => 1
            [pts_cg] => 1
        )

)

当我运行时,由于它不是递归的,所以会count(array_filter($mm))得到3结果。

count(array_filter($mm), COUNT_RECURSIVE)也不会这样做,因为我实际上需要array_filter递归运行,然后计算其结果。

所以我的问题是:array_filter($mm)在这种情况下如何递归运行?我的预期结果是4

请注意,我没有使用任何回调,因此可以排除false,null和empty。


问题答案:

应该管用

$count = array_sum(array_map(function ($item) {
  return ((int) !is_null($item['pts_m'])
       + ((int) !is_null($item['pts_mreg'])
       + ((int) !is_null($item['pts_cg']);
}, $array);

或许

$count = array_sum(array_map(function ($item) {
  return array_sum(array_map('is_int', $item));
}, $array);

肯定还有更多可能的解决方案。如果你想使用array_filter()(没有回调)记住,它把0false过,因此它会 删除
任何0从数组-值。

如果您在5.3之前的版本中使用PHP,则应使用foreach-loop

$count = 0;
foreach ($array as $item) {
  $count += ((int) !is_null($item['pts_m'])
          + ((int) !is_null($item['pts_mreg'])
          + ((int) !is_null($item['pts_cg']);
}

更新资料

关于以下评论:

Thx @kc我实际上希望该方法删除false,0,空等

当这仅仅是您想要的时,解决方案也非常简单。但是现在我不知道该如何解释

我的预期结果是5。

无论如何,它现在很短:)

$result = array_map('array_filter', $array);
$count = array_map('count', $result);
$countSum = array_sum($count);

结果数组看起来像

Array
(
[147] => Array
    (
        [pts_mreg] => 1
        [pts_cg] => 1
    )    
[158] => Array
    (
    )

[159] => Array
    (
        [pts_mreg] => 1
        [pts_cg] => 1
    )

)


 类似资料:
  • 问题内容: 目录类似于: 我正在使用与PHPMyAdmin使用的相同的PHPZip类。我不确定如何压缩目录而不是仅压缩文件。这是我到目前为止的内容: 但是当我尝试解压缩相应的已下载的zip文件时,出现“不允许操作” 仅当我尝试在Mac上解压缩时,才出现此错误,当我通过命令行解压缩时,文件解压缩就可以了。我是否需要在下载时发送特定的内容类型,当前为“application / zip” 问题答案:

  • 问题内容: 如何通过$ _GET将数组类型的一个或多个变量传递给另一页? 我总是以以下形式传递变量值 那传球呢? 我是否需要编写一个for循环并附加所有值? 谢谢 问题答案: 您可以使用语法通过_GET传递数组: PHP理解此语法,因此等于。 您还可以指定键: 多维数组也可以工作: 自动执行此操作: 一种替代方法是传递json编码的数组: 您可以解析为: 并再次使用json_encode对其进行编

  • 本文向大家介绍PHP递归统计系统中代码行数,包括了PHP递归统计系统中代码行数的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了PHP递归统计系统中代码行数的具体代码,供大家参考,具体内容如下 1、统计代码行数,必然用到的两个关键的知识点:函数递归以及文件读取。 函数递归无非就是在函数的代码中调用本身的函数名,以此形成递归循环 在文件读取中,有很多读取方式,采用了file()读取,按行

  • 我有一个任务,它获取一个int值“n”和一个Int Array作为参数,并且应该返回一个布尔值。该方法应该确定给定数组中有多少个“n”。如果数字是偶数,则方法应该返回true,否则返回false。如果数组的长度为0,它也应该返回“false”。 我设法做到的是: 老实说,我真的很困惑,我不知道该怎么办。我真的已经尽力了,但是我在这项任务上工作的时间越长,我就越不理解。感谢任何帮助,并提前感谢您!:

  • 问题内容: 我试图将硬盘上的某些文件夹放入阵列中。 例如,度假图片。假设我们具有以下结构: 套装1 第一组的项目1 第一组的项目2 第1套​​的项目〜 套装2 组2的子集1 组2的子集1的项目1 组2的子集1的项目… 第2组的子集2 随机文件,而不是目录。 套装3 … 我想要像这样的东西作为数组。 意思是我有1个大数组,在那个数组中有更多数组。每个集合和子集都有自己的数组。 我正在尝试使其看起来像

  • 我需要使用这个方法: 然后使用递归计算存储在数组中的最大数、负数的计数以及正数的和。因此,您将在Assignment9类中创建递归方法findMax、countNegative和ComputeSum积极,它们将由main方法调用。 具体来说,必须实现以下递归方法(这些方法不应包含任何循环): 在数组中 如果我能算出这个负的,我就能算出计算的正的。 计数可以是你需要的任何东西。我把它更多地用作Fin