亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸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個贊

我糾正了你的方法?,F在它如你所愿。您還需要刪除返回的 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 關注
  • 89 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號