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

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

檢查嵌套數組的 in_array

檢查嵌套數組的 in_array

PHP
慕少森 2021-12-03 19:17:42
我有一個這種格式的數組,我想從任何鍵檢查數組中是否有一個 var link    $nav = array(        'Account Settings' => array(            'icon' => 'fa-cog',            'Account Settings' => array(                'link' => '/voip/settings?seq='.$seq,                'icon' => 'fa-cog',            ),            'Provisioning' => array(                'link' => '/voip/provisioning?seq='.$seq,                'icon' => 'fa-wrench',            ),            'E999 Data' => array(                'link' => '/voip/e999?seq='.$seq,                'icon' => 'fa-life-ring',            ),            'Delete Account' => array(                'link' => '/voip/delete?seq='.$seq,                'icon' => 'fa-trash',            ),        ),        'Mailboxes' => array(            'link' => '/voip/mailboxes?seq='.$seq,            'icon' => 'fa-envelope',        ),        'Telephone Numbers' => array(            'link' => '/voip/numbers?seq='.$seq,            'icon' => 'fa-hashtag',        ),    );我試過了,if(in_array($_GET["nav"], $nav)但它沒有選擇嵌套的值有沒有辦法做到這一點?
查看完整描述

2 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

沒有現成的功能可以做到這一點。假設你有:


$key = 'link';

$value = '/voip/e999?seq=' . $seq;

// and $nav your multidimensionnal array

您可以編寫自己的遞歸函數:


function contains_key_value_multi($arr, $key, $value) {

    foreach ($arr as $k => $v) {

        if ( is_array($v) && contains_key_value_multi($v, $key, $value) ||

             $k === $key && $v === $value )

            return true;

    }

    return false;

}


var_dump(contains_key_value_multi($nav, $key, $value));

您可以使用spl 類來遍歷多維數組的葉子。這次你不需要遞歸函數:


$ri = new RecursiveIteratorIterator(new RecursiveArrayIterator($nav));


function contains_key_value($arr, $key, $value) {

    foreach ($arr as $k => $v) {

        if ( $k === $key && $v === $value ) 

            return true;

    }

    return false;

}


var_dump(contains_key_value($ri, $key, $value));


查看完整回答
反對 回復 2021-12-03
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

既然你說值在link鍵中,那么你可以使用 array_column 來隔離link項目。

if(in_array($_GET["nav"], array_column($nav['Account Settings'], "link")) || in_array($_GET["nav"], array_column(array_slice($nav, 1), "link"))){

這將首先查看帳戶設置中的所有鏈接項,然后切出帳戶設置并查看鏈接項的其他兩個子數組。


查看完整回答
反對 回復 2021-12-03
  • 2 回答
  • 0 關注
  • 233 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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