如何在数组数组中使用foreach和if语句?

时间:2016-08-30 11:43:13

标签: php arrays wordpress if-statement foreach

我正在开发WordPress插件并使用Tareq's WordPress Settings API开发设置页面。

使用API​​,我正在显示复选框项。但是,我想使用foreachif语句显示其他复选框。

  • foreach:这会显示wp_get_user_contact_methods()
  • 中每个字段的其他复选框
  • if:如果另一个插件被激活,这将显示一组额外的复选框

这就是我现在的逻辑:

$settings_fields = array( // Parent array
    'dsbl_basics' => array( // Child array
        array( // Child's child array
            'name' => 'text_val',
            'label' => __( 'Text Input', 'dsbl' ),
            'type' => 'text',
            'default' => 'Title',
            'sanitize_callback' => 'intval'
        )
    ),
    'dsbl_profile' => array( // Child array
        array( // Child's child array
            'name' => 'name',
            'label' => __( 'Name', 'dsbl' ),
            'type' => 'multicheck',
            'options' => array(
                'first_name' => 'First Name',
                'last_name' => 'Last Name'
            )
        ),
        array( // Child's child array
            'name' => 'contact_info',
            'label' => __( 'Contact Info', 'dsbl' ),
            'type' => 'multicheck',
            'options' => array(
                'url' => 'Website',
                foreach ( wp_get_user_contact_methods() as $value => $label ) { // Additional contact fields
                    $value => $label
                }
            )
        ),
        if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) { // If plugin exists
            array( // Child's child array
                'name' => 'yoast_seo',
                'label' => __( 'Yoast SEO', 'dsbl' ),
                'type' => 'multicheck',
                'options' => array(
                    'wpseo_author_title' => 'Title to use for Author page',
                    'wpseo_author_metadesc' => 'Meta description to use for Author page'
                )
            ),
        }
    )
);

我知道我的语法已关闭,这给了我这些错误:

  

解析错误:语法错误,意外foreach(T_FOREACH),期待)

     

解析错误:语法错误,意外if(T_IF),期待)

对此有什么正确的解决方法?

2 个答案:

答案 0 :(得分:2)

$contactArray = [];
foreach ( wp_get_user_contact_methods() as $value => $label ) { 
    $contactArray[$value] = $label;
}
$contactArray['url'] = 'Website';

$settings_fields = array( // Parent array
    'dsbl_basics' => array( // Child array
        array( // Child's child array
            'name' => 'text_val',
            'label' =>  'Text Input',
            'type' => 'text',
            'default' => 'Title',
            'sanitize_callback' => 'intval'
        )
    ),
    'dsbl_profile' => array( // Child array
        array( // Child's child array
            'name' => 'name',
            'label' => 'dsbl',
            'type' => 'multicheck',
            'options' => array(
                'first_name' => 'First Name',
                'last_name' => 'Last Name'
            )
        ),
        array( // Child's child array
            'name' => 'contact_info',
            'label' => 'Contact Info', 
            'type' => 'multicheck',
            'options' => $contactArray
        )
    )
);

$yaostSEO = array( // Child's child array
    'name' => 'yoast_seo',
    'label' => 'Yoast SEO', 
    'type' => 'multicheck',
    'options' => array(
        'wpseo_author_title' => 'Title to use for Author page',
        'wpseo_author_metadesc' => 'Meta description to use for Author page'
    )
);

if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) {
    $settings_fields['dsbl_profile'][] = $yaostSEO;
}

答案 1 :(得分:1)

你不能把foreach语句(也不是for,for,do或任何循环或控制结构if / else)作为数组值或数组中的任何位置。无论如何,这个想法来自哪里?这样的事应该做​​。

$settings_fields = array( // Parent array
    'dsbl_basics' => array( // Child array
        0 => array( // Child's child array
            'name' => 'text_val',
            'label' => __( 'Text Input', 'dsbl' ),
            'type' => 'text',
            'default' => 'Title',
            'sanitize_callback' => 'intval'
        )
    ),
    'dsbl_profile' => array( // Child array
        0 => array( // Child's child array
            'name' => 'name',
            'label' => __( 'Name', 'dsbl' ),
            'type' => 'multicheck',
            'options' => array(
                'first_name' => 'First Name',
                'last_name' => 'Last Name'
            )
        ),
        1 => array( // Child's child array
            'name' => 'contact_info',
            'label' => __( 'Contact Info', 'dsbl' ),
            'type' => 'multicheck',
            'options' => array(
                'url' => 'Website',
                /* this isn't place for loops */
            )
        )
    )
);


if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) 
{   // If plugin exists
    $settings_fileds['dsbl_profile'][2]  =  array( // Child's child array
        'name' => 'yoast_seo',
        'label' => __( 'Yoast SEO', 'dsbl' ),
        'type' => 'multicheck',
        'options' => array(
            'wpseo_author_title' => 'Title to use for Author page',
            'wpseo_author_metadesc' => 'Meta description to use for Author page'
        )
    );
}