Php 多维关联数组
因此,我有以下代码:Php 多维关联数组,php,arrays,function,multidimensional-array,arguments,Php,Arrays,Function,Multidimensional Array,Arguments,因此,我有以下代码: $options = array( 'navigation' => array( 'page_title' => 'test', 'menu_title' => 'test_title', 'capabillity' => '', 'menu_slug' => '', 'function' => '', 'icon_url' =>
$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'];
现在,导航/sub_menues/[0]数组中存在menu slug,但不存在于[1]数组中
解决此问题的典型方法是:
if(isset($sub_menu['menu_slug'])){ // do something }
从导航阵列中可以看到,如果设置了“执行此操作,否则执行此操作”,将会有大量的。我正在寻找一种更干净、更整洁的方式,我可以只做$sub_菜单['something'],它会自动检查某个东西是否存在,如果存在,就会返回它的值,如果不做什么,就忽略它
现在我有了正确的想法,我在哪里做*如果设置为$sub_menu[$sk]*那么我可以做:
echo $sub_menu[$sk];
array_walk_recursive($options, function($value, $key){
if($value && in_array($key, array('menu_slug', 'page_title', 'option_group', 'core_template')))
print $value;
});
问题是我在这里调用一个函数,它接受参数,参数是键的值,因此我必须执行$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,可能是可选的
有什么想法吗?好吧,如果你的钥匙在各个级别上都是独一无二的,你可以:
echo $sub_menu[$sk];
array_walk_recursive($options, function($value, $key){
if($value && in_array($key, array('menu_slug', 'page_title', 'option_group', 'core_template')))
print $value;
});
:)
但我假设您的真正目的是将此文本包装为HTML字符串,因此您应该使用
switch
而不是我的if
语句,并打印您想要的任何内容。如果需要按特定顺序打印内容,请使用临时数组存储生成的输出,并在完成后打印。我使用该数组来决定要打印的值。不管怎样,你试过了吗?