PHP数组 - Foreach,动态值 - 奇怪

时间:2017-10-21 10:41:07

标签: php arrays foreach associative-array

我尝试在PHP关联数组中生成一个动态值列表,但我无法做到。

1)使用此代码

foreach ($states as $state) {
  $state_options[$state->country()->name()][$state->ID()] = $state->name();
}

我获得了

<optgroup label="France">
<option value="01 - Ain">01 - Ain</option>
<option value="02 - Aisne">02 - Aisne</option>
</optgroup>

我在值中获取名称而不是ID。

2)使用此代码

foreach ($states as $state) {
  $state_options[$state->country()->name()][$state->name()] = $state->ID();
}

我获得了

<optgroup label="France">
<option value="01 - Ain">77</option>
<option value="02 - Aisne">78</option>
<option value="03 - Allier">79</option>
</optgroup>

我可以获取ID。

我的目标是获得

<optgroup label="France">
<option value="77">01 - Ain</option>
<option value="78">02 - Aisne</option>
<option value="79">03 - Allier</option>
</optgroup>

非常感谢你的帮助

在评论之后编辑22/10/17

我的完整代码

add_filter( 'gform_address_types', 'france_address_type' );
function france_address_type( $address_types ) {

$state_options = array('' => array('' => ''));
$states        = EEM_State::instance()->get_all_active_states();
if (! empty($states)) {
    foreach ($states as $state) {
        if ($state instanceof EE_State) {
            $state_options[$state->country()->name()][$state->ID()] = $state->name();
        }
    }
}

$address_types[ 'france' ] = array(
    'label'       => 'France',
    'country'     => 'France',
    'zip_label'   => 'Code Postal',
    'state_label' => 'Département',
    'states'      => $state_options
);

return $address_types;
}

2 个答案:

答案 0 :(得分:0)

由于$state->name()显然与&#34; 01 - Ain&#34;和$state->ID()对应77,因此使用后者作为键,前者作为值:

foreach ($states as $state) {
  $state_options[$state->country()->name()][$state->ID()] = $state->name();
}

答案 1 :(得分:-2)

你可以这样试试,你可以得到预期的结果。

<optgroup label="France">
   <?php foreach ($states as $state) { ?>
       <option value="<?php echo $state->ID(); ?>">
       <?php echo $state->name();?></option>
   <?php } ?>
</optgroup>