簡體   English   中英

根據其鍵值取消設置數組

[英]Unset array based on it's key value

我正在使用基於auth密鑰值的視圖限制創建導航。 我的代碼給了我想要的輸出,但我相信它可能比我做的更好。

public function set_nav()
{
    $nav[ 'settings' ] = array(

        array(
            'auth'     => false,
            'url'      => 'user-points',
            'label'    => 'Social Points',
            'selected' => 1
        ),
        array(
            'auth'     => false,
            'url'      => 'user-activities',
            'label'    => 'Social Activity',
            'selected' => 0
        ),
        array(
            'auth'     => true,
            'url'      => 'user-settings',
            'label'    => 'Social Settings',
            'selected' => 0
        )
    );

    foreach ( $nav as $item ) {

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

            if ( array_key_exists( 'auth', $v ) ) {

                if($v['auth'] === false){
                    unset($k);
                    $items[] = $v;
                }

            }
        }
    }

    return $items;
}

任何人都可以幫助我以更好的方式優化代碼嗎? 我正在編寫一個系統,這將是該系統的導航,所以最終我將把它寫成一個方法。 可能是數組作為方法的參數。

方法

public function set_nav(array $nav_items)
{
    $this->subnav = $nav_items;

    foreach ( $this->subnav as $item ) {

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

            if ( array_key_exists( 'auth', $v ) ) {

                if($v['auth'] === false){
                    unset($k);
                    $items[] = $v;
                }

            }
        }
    }

    return $items;
}

用法

$nav_items[ 'settings' ] = array(

    array(
        'auth'     => false,
        'url'      => 'user-points',
        'label'    => 'Social Points',
        'selected' => 1
    ),
    array(
        'auth'     => false,
        'url'      => 'user-activities',
        'label'    => 'Social Activity',
        'selected' => 0
    ),
    array(
        'auth'     => true,
        'url'      => 'user-settings',
        'label'    => 'Social Settings',
        'selected' => 0
    )
);

$mynav->set_nav($nav_items);

這應該適合你:

首先得到列auth與陣列與array_column()和過濾所有用虛假值了array_filter()

然后你可以簡單地執行一個array_intersect_key()調用來去除數組,這些數組的auth值為false。

$keys = array_filter(array_column($nav['settings'], "auth", NULL));
$nav['settings'] = array_intersect_key($nav['settings'], $keys);

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM