我尝试在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;
}
答案 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>