根据它的键值取消设置数组
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);
这应该适合你:
首先使用 array_column()
and filter all falsely values out with array_filter()
从数组中获取列 auth
。
然后您可以简单地执行 array_intersect_key()
调用以删除数组,这些数组的值为 false auth
。
$keys = array_filter(array_column($nav['settings'], "auth", NULL));
$nav['settings'] = array_intersect_key($nav['settings'], $keys);
我正在使用基于 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);
这应该适合你:
首先使用 array_column()
and filter all falsely values out with array_filter()
从数组中获取列 auth
。
然后您可以简单地执行 array_intersect_key()
调用以删除数组,这些数组的值为 false auth
。
$keys = array_filter(array_column($nav['settings'], "auth", NULL));
$nav['settings'] = array_intersect_key($nav['settings'], $keys);