我正在使用其中一个预渲染过滤器来填充wordpress重力形式。
我正常关注他们的documentation,并使用每次都有效的foreach循环动态填充$ items []。
但是这次我没有动态为$ items []数组创建一个php foreach循环,我手动将每个值输入到数组中。
请参阅下文......
add_filter("gform_pre_render", "populate_dropdown_bike_make");
add_filter("gform_admin_pre_render", "populate_dropdown_bike_make");
function populate_dropdown_bike_make($form){
if($form["id"] != 4)
return $form;
$items = array();
$items[] = array(
"text" => "", "value" => null,
"text" => "YAMASAKI", "value" => "YAMASAKI",
"text" => "YAMOTO", "value" => "YAMOTO",
"text" => "YEZDI", "value" => "YEZDI",
"text" => "YIBEN", "value" => "YIBEN",
"text" => "YIYING", "value" => "YIYING",
"text" => "YONGKANG", "value" => "YONGKANG",
"text" => "YONGWANG", "value" => "YONGWANG",
"text" => "ZEBRETTA", "value" => "ZEBRETTA",
"text" => "ZENNCO", "value" => "ZENNCO",
"text" => "ZEPII", "value" => "ZEPII",
"text" => "ZERO-MOTORCYCLES", "value" => "ZERO-MOTORCYCLES",
"text" => "ZEV", "value" => "ZEV",
"text" => "ZHEJIANG", "value" => "ZHEJIANG",
"text" => "ZHENHUA", "value" => "ZHENHUA",
"text" => "ZHIXI", "value" => "ZHIXI",
"text" => "ZHONGYU", "value" => "ZHONGYU",
"text" => "ZING", "value" => "ZING",
"text" => "ZIPPI", "value" => "ZIPPI",
"text" => "ZIPSTAR", "value" => "ZIPSTAR",
"text" => "ZONGSHEN", "value" => "ZONGSHEN",
"text" => "ZONTES", "value" => "ZONTES",
"text" => "ZUNDAPP", "value" => "ZUNDAPP"
);
foreach($form["fields"] as &$field)
if($field["id"] == 45){
$field["choices"] = $items;
}
return $form;
}
现在问题是它只返回下拉列表中最后一个选项 ZUNDAPP 。
有人能看出为什么会这样吗?
由于
答案 0 :(得分:4)
你一遍又一遍地重新定义相同的密钥。
$items[] = array(
"text" => "", "value" => null,
"text" => "YAMASAKI", "value" => "YAMASAKI"
)
给出:
array(array(
"text" => "YAMASAKI",
"value" => "YAMASAKI"
));
认为你打算:
// v-- no [] here
$items = array(
array("text" => "", "value" => null),
array("text" => "YAMASAKI", "value" => "YAMASAKI"),
// etc.
答案 1 :(得分:2)
我认为问题依赖于你构建的数组结构。
您只需添加一个元素(即数组)。在您的数组本身中,您可以通过重新定义它们来覆盖所有以前的键。
使用以下语法:
$items[] = array("text" => "", "value" => null);
$items[] = array("text" => "YAMASAKI", "value" => "YAMASAKI");
您也可以直接指定数组:
$items = array(
array("text" => "", "value" => null),
array("text" => "YAMASAKI", "value" => "YAMASAKI"),
// ...
);
答案 2 :(得分:0)
每次向text
插入内容时,您都会覆盖value
和$items
。
您可能需要插入
等值$items = array( 'key' => 'value', .... )
根据documention:
将数据中的单个条目包装起来$items = array (
array ('value' => value1, 'key' => key1 ),
array ('value' => value2, 'key' => key2 ),
....
);
答案 3 :(得分:0)
$items[] = array(
^^
有你的问题。这导致您的数组变成多维数组。你的代码假设它仍然是一维数组,这就是它只输出最后一个元素的原因。
将其更改为:
$items = array(
例如:
$arr = array();
$arr[] = array('foo' => 'bar');
print_r($arr);
根据您的逻辑,输出应为:
Array
(
[foo] => bar
)
但实际上是:
Array
(
[0] => Array
(
[foo] => bar
)
)