【问题标题】:manual php array only returning last value手动 php 数组只返回最后一个值
【发布时间】:2013-09-25 15:57:48
【问题描述】:

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

谁能明白为什么会这样?

谢谢

【问题讨论】:

  • 你的数组只有两个条目,一个是文本键,一个是值键。您覆盖了每一行的值,因此最后,ZUNDAPP 是其中唯一的值。

标签: php gravity-forms-plugin


【解决方案1】:

您一遍又一遍地重新定义相同的键。

$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.

【讨论】:

    【解决方案2】:

    我认为问题在于您构建的数组结构。

    您只需添加一个元素(即一个数组)。在您的数组本身中,您可以通过重新定义所有以前的键来覆盖它们。

    使用这个语法:

    $items[] = array("text" => "", "value" => null);
    $items[] = array("text" => "YAMASAKI", "value" => "YAMASAKI");
    

    也可以直接赋值数组:

    $items = array(
        array("text" => "", "value" => null),
        array("text" => "YAMASAKI", "value" => "YAMASAKI"),
        // ...  
    );
    

    【讨论】:

    • 好吧,我想这是有道理的,我不确定他们是否是一种更短的封装方式
    • 我正要说你需要像弗里茨写的那样在每一行都有数组。谢谢
    • @Joshc 是的,你需要那个(我现在编辑的评论是错误的,抱歉)。否则,您将不会插入数据值数组的数组。
    【解决方案3】:
    $items[] = array(
          ^^
    

    你的问题。这导致您的数组变成多维数组。您的代码假定它仍然是一个一维数组,这就是它只输出最后一个元素的原因。

    改成:

    $items = array(
    

    例如:

    $arr = array();
    $arr[] = array('foo' => 'bar');
    print_r($arr);
    

    根据你的逻辑,输出应该是:

    Array
    (
        [foo] => bar
    )
    

    但实际上是:

    Array
    (
        [0] => Array
            (
                [foo] => bar
            )
    
    )
    

    【讨论】:

    • 感谢您的回答
    【解决方案4】:

    每次您在$items 中插入内容时,您都会覆盖textvalue

    您可能需要插入诸如

    之类的值
    $items = array( 'key' => 'value', .... )
    

    或者根据documention将各个条目包装在一个数组中:

    $items = array (
                array ('value' => value1, 'key' => key1 ),
                array ('value' => value2, 'key' => key2 ),
                ....
             );
    

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多