【发布时间】:2013-01-25 10:24:23
【问题描述】:
所以我有以下代码:
$options = array(
'navigation' => array(
'page_title' => 'test',
'menu_title' => 'test_title',
'capabillity' => '',
'menu_slug' => '',
'function' => '',
'icon_url' => '',
'position' => '',
'sub_menues' => array(
array(
'page_title' => 'test',
'menu_title' => 'test_title',
'menu_slug' => 'bla'
),
array(
'page_title' => 'apples',
'menu_title' => 'test_apples',
), // Set of Navigations
)
),
'settings' => array(
array(
'option_group' => 'bla',
'option_name' => '',
'sanitize_call_back' => ''
)
),
'core_template' => 'path/to/admin/template.phtml'
);
foreach($options as $setting=>$option){
if($setting == 'navigation' && is_array($option)){
foreach($option as $k=>$v){
if(is_array($v)){
foreach($v as $sub_menu){
foreach($sub_menu as $sk=>$sv){
if(isset($sub_menu[$sk])){
echo $sub_menu['menu_slug'];
}
}
}
}
if(isset($option[$k])){
echo $option['page_title'];
}
}
}
if($setting == 'settings' && is_array($option)){
foreach($option as $settings_options){
foreach($settings_options as $sk => $sv){
if(isset($settings_options[$sk])){
echo $settings_options['option_group'];
}
}
}
}
if($setting = 'core_template'){
echo $options['core_template'];
}
}
这是一团糟,需要重构,直到你输入一个不存在的变量。看到这个的好方法:
echo $sub_menu['menu_slug'];
现在 menu_slug 存在于 navigation/sub_menues/[0] 数组中,但不在 [1] 数组中。
解决此问题的典型方法是:
if(isset($sub_menu['menu_slug'])){ // do something }
正如您从导航数组中看到的那样,会有 很多 如果设置为执行此操作,则执行此操作。 我正在寻找一种更干净整洁的方式,我可以只做 $sub_menu['something'] 并自动检查是否存在某些东西,如果存在,则返回其值,如果不做任何事情,则忽略它。
现在我有了正确的想法,我在哪里做 *if is set $sub_menu[$sk]* 然后我可以做:
echo $sub_menu[$sk];
问题是我在这里调用了一个接受参数的函数,参数是键的值,因此为什么我必须做 $sub_menu['menu_slug'] 例如。
所以我的问题是:
我该怎么做:
some_function_call($sub_menu['menu_slug']);
无需做任何事情:
if(isset($sub_menu['menu_slug']) && isset($sub_menu['page_title']) /*...and so on...*/){
some_function_call($sub_menu['menu_slug'], $sub_menu['page_title'] /*..and so on...*/);
}
问题? - 一些选项,例如(例如)菜单 slug,可能是可选的。
有什么想法吗?
【问题讨论】:
标签: php arrays function multidimensional-array arguments