根据键值

时间:2015-07-24 10:58:36

标签: php arrays methods navigation

我正在使用基于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);

1 个答案:

答案 0 :(得分:3)

这应该适合你:

首先使用array_column()从数组中获取列auth,并使用array_filter()过滤掉所有错误值。

然后你可以简单地进行array_intersect_key()调用来摆脱数组,这些数组的值为auth

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

Demo