[英]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.