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