手动php数组只返回最后一个值

时间:2013-09-25 15:57:48

标签: php gravity-forms-plugin

我正在使用其中一个预渲染过滤器来填充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

有人能看出为什么会这样吗?

由于

4 个答案:

答案 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
        )

)