为了账号安全,请及时绑定邮箱和手机立即绑定

递归PHP函数查找多维数组中数组中第一次出现的键

递归PHP函数查找多维数组中数组中第一次出现的键

PHP
哆啦的时光机 2023-03-11 15:29:09
我正在尝试递归循环遍历我的多维数组,如果它们的数组有键,我想返回当前数组。我试图让它尽可能简单,但这返回奇怪的类型错误让我感到困惑。在 foreach 循环内,如果嵌套项是一个数组,则再次运行该函数,直到找到键的出现。挠我的头,谁能看出我的问题。谢谢。<?php/** * @param int|string $key * @param array $array * @return bool|array */public static function multi_array_key_exists($key,$array): bool{    // if array key exist in this dimension    if (array_key_exists($key,$array)) {        // return the array        return $array;    } else {        // foreach array as nested item        foreach ($array as $nested) {            // if the nested item is an array            if (is_array($nested))                // run this function again                self::multi_array_key_exists($key,$nested);        }    }    return false;}
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

当您进行递归调用时,您会忽略它返回的内容。您应该检查它,看看该调用是否找到了匹配项。

代替:

self::multi_array_key_exists($key,$nested);

和:

$res = self::multi_array_key_exists($key,$nested);if ($res !== false) return $res;

(不要忘记将语句括在大括号中)。

只有当所有递归调用都返回时false你才能安全地return false结束函数体。

一旦这样的递归调用返回一个匹配项,就没有必要在该foreach循环中保持迭代。您可以立即退出,将相同的信息返回给父执行上下文。

另一个问题是,您声明函数返回 a bool,但您希望它有时返回false,有时返回数组(当有匹配项时)。所以那是行不通的。


查看完整回答
反对 回复 2023-03-11
?
Helenr

TA贡献1780条经验 获得超4个赞

我纠正了你的方法。现在它如你所愿。您还需要删除返回的 bool 类型,因为它可以是数组或布尔值。


public static function multi_array_key_exists($key,$array)

{

    // if array key exist in this dimension

    if (array_key_exists($key,$array)) {

        // return the array

        return $array;

    } else {

        // foreach array as nested item

        foreach ($array as $nested) {

            // if the nested item is an array

            if (is_array($nested)) {

                // run this function again

                $value = self::multi_array_key_exists($key,$nested);

                if ($value) {

                    return $value;

                }

            }

        }

    }

    return false;

}


查看完整回答
反对 回复 2023-03-11
  • 2 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号