【问题标题】:implode logic not working as expected内爆逻辑未按预期工作
【发布时间】:2013-02-10 18:30:10
【问题描述】:

所以我正在构建this question about multidimensional associative array of arrays。我想出的是一种非常简单易行的方法来解决我的问题。以下数组:

$options = array(
    'navigation' => array(
        'page_title' => __('Aisis', 'aisis'),
        'menu_title' => __('Aisis', 'aisis'),
        'capabillity' => 'edit_themes',
        'menu_slug' => 'aisis-core-options',
        'function' => 'some_function',
        'icon_url' => '',
        'position' => '',
        'sub_menues' => array(
            array(
                'page_title' => __('Aisis', 'aisis'),
                'menu_title' => __('Aisis', 'aisis'),
                'capabillity' => 'edit_themes',
                'menu_slug' => 'aisis-core-options',
                'function' => 'some_function',
            ), 
            array(
                'page_title' => __('Aisis', 'aisis'),
                'menu_title' => __('Aisis', 'aisis'),
                'capabillity' => 'edit_themes',
                'menu_slug' => 'aisis-core-options',
                'function' => 'some_function',
            ), 
        )
    ),
    'settings' => array(
        array(
            'option_group' => 'bla',
            'option_name' => '',
            'sanitize_call_back' => ''
        )
    ),
    'core_template' => 'path/to/admin/template.phtml'
);

然后这样处理:

foreach($options as $settings=>$option){
    if($setting = 'navigation' && is_array($option)){
        foreach($option as $option_key=>$option_value){
            var_dump($option);
            if(!is_array($option_value)){
                echo implode(',', $option);
            }
        }
    }
}

问题是:

在我要说明的最后一个 if 语句中,或者至少我认为我是这样,只要 $options['navigation'] 中的键的值不是数组,就可以分解数组并返回值。这一切都按预期工作,接受它给了我 “数组到字符串的转换”,由于 if 语句,它“不应该”。

所以我的简单问题是:

只要键的值不是数组,我如何内爆 $options['navigation']?

我以为我在正确的轨道上......

另外,在这点上,当我看到 var_dump($option_values) 时,我看到了其他数组,所以我不仅看到了 'sub_menues',而且还看到了 'settings' 数组

我认为我的逻辑是合理的:

如果关键是导航,请执行此操作。

在这种情况下,基本上我遇到了数组的范围问题,所以我如何让它只查看键 => 值和 $options['navigation'] 中的任何其他数组,而不是 $options 中的?

【问题讨论】:

  • implode() 明确适用于数组...如果键不是数组,则不应使用implode()

标签: php arrays multidimensional-array associative-array


【解决方案1】:

使用== 而不是= 来比较值。

编辑:也就是说,如果您只对一个键感兴趣,为什么要使用 foreach?

if( is_array($options['navigation'])) {
    foreach($options['navigation'] as $value) {
        if( is_array($value)) echo implode(",",$value);
    }
}

【讨论】:

  • 因为如果键的值不是数组,则内爆,否则内爆。
【解决方案2】:

基于 Kolink 解决方案构建的正确解决方案:

$temp_array = array();
if( is_array($options['navigation'])) {
    foreach($options['navigation'] as $value) {
        if(!is_array($value)){
            $temp_array[] = $value;
        }
    }

    echo implode(',', $temp_array);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2021-04-22
    • 2018-08-28
    相关资源
    最近更新 更多