【问题标题】:How to check if element is in a Nested Array PHP?如何检查元素是否在嵌套数组 PHP 中?
【发布时间】:2022-01-27 07:40:25
【问题描述】:

用例:

$a = [1, 2, [3, 4, 5], [6, [7, 8], 8, 10]];
isNumberPresentInArray($a, 10) // returns true;
isNumberPresentInArray($a, 2) // returns true;
isNumberPresentInArray($a, 14) // returns false;

我想检查数组中是否存在元素。以下是我的代码版本。但它不适用于内部数组。请帮帮我。

$a = [1, 2, [3, 4, 5], [6, [7, 8], 8, 10]];

function isNumberPresentInArray($a, $b) {
    foreach($a as $v)
    {
        if (is_array($v)) {
            return isNumberPresentInArray($v, $b);
        } else {
            if ($v == $b) {
                return true;
            }
        }
    }
}

echo isNumberPresentInArray($a, 1);

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    你的错误在这里:

    return isNumberPresentInArray($v, $b);
    

    你应该返回函数的结果只有当结果是true,因为如果你不这样做,你将停止循环并且在此之后不检查值观点。如果未找到 $b,您还错过了 return false 并得到 NULL 而不是 false

    function isNumberPresentInArray($a, $b) 
    {
        foreach($a as $v)
        {
            if (is_array($v)) {
                if (isNumberPresentInArray($v, $b)) {
                    return true;
                }
            } 
            elseif ($v == $b) {
                return true;
            }
        }
        return false;
    }
    

    用法

    $a = [1, 2, [3, 4, 5], [6, [7, 8], 8, 10]];
    var_dump(isNumberPresentInArray($a, 10)); // bool(true);
    var_dump(isNumberPresentInArray($a, 2)); // bool(true);
    var_dump(isNumberPresentInArray($a, 14)); // bool(false);
    var_dump(isNumberPresentInArray($a, 1)); // bool(true);
    

    另见a live demo (3v4l.org)

    【讨论】:

      【解决方案2】:

      你可以使用迭代器:

      $arr = [ 1, 2, [ 3, 4, 5 ], [ 6, [ 7, 8 ], 9, 10 ] ];
      
      function isNumberPresentInArray(array $arr, int $number): bool {
        $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::LEAVES_ONLY);
        foreach ($it as $value) {
          if ($value === $number) {
            return true;
          }
        }
        return false;
      }
      
      echo '10: ' . ( isNumberPresentInArray($arr, 10) ? 'yes' : 'no' ) . "\n";
      echo ' 2: ' . ( isNumberPresentInArray($arr, 2) ? 'yes' : 'no' ) . "\n";
      echo '14: ' . ( isNumberPresentInArray($arr, 14) ? 'yes' : 'no' ) . "\n";
      

      这将打印:

      10: yes
       2: yes
      14: no
      

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-30
        • 2010-12-21
        相关资源
        最近更新 更多