だから私は次のコードを持っています:
$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]arrayには存在しません。
これを修正する一般的な方法は次のとおりです。
if(isset($sub_menu['menu_slug'])){ // do something }
ナビゲーション配列からわかるように、設定されている場合はこれを実行し、そうでない場合は実行することがたくさんあります。$ sub_menu ['something']を実行するだけで、よりクリーンでわかりやすい方法を探しています。存在するかどうかを自動的にチェックし、存在する場合はその値を返します。存在しない場合は、無視します。
これで、正しいアイデアが得られました。* if 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...*/);
}
キャッチ?-(たとえば)メニュースラッグなどの一部のオプションはオプションの場合があります。
何か案は?