2013-09-25 105 views
0

我使用填充的一個有預渲染濾波器WordPress的重力形式。手冊PHP數組只返回最後一個值

我按照他們的正常documentation我使用foreach循環,其每一次工作動態填充$項目[]。

但此時我不是動態正在爲$項[]數組,我手動輸入每個值到一個數組一個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; 

} 


現在有了這個問題它只是返回在下拉列表中最後一個選項春達普

任何人都可以看到爲什麼會發生這種情況嗎?

謝謝

+1

您的陣列只有兩個條目,一個是文本鍵,另一個是鍵值。您會在每行上覆蓋該值,因此最後,ZUNDAPP是其中唯一的值。 – andrewsi

回答

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. 
+0

啊,我明白了。謝謝我可以做這個工作 – Joshc

2

我想在你的內置陣列結構的問題依賴。

只添加一種元素(其是陣列)。在你的數組本身中,通過重新定義它們來覆蓋所有以前的鍵。

使用此語法:

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

您也可以直接在陣列分配:

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

好吧,我想這是有道理的,我不確定他們是否是封裝它的更短的方式 – Joshc

+0

大arrray將如何工作或寫入? – Joshc

+0

@Joshc看到我的更新,你可以直接分配你的數組。 – ComFreek

0

你要覆蓋textvalue每次你的東西插入到$items

你很可能需要插入值,如

$items = array('key' => 'value', ....) 

或陣列包住各個條目,每documention

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

謝謝你ryan – Joshc

0
$items[] = array(
     ^^ 

有你的問題。這導致你的數組變成一個多維數組。你的代碼假設它仍然是一維數組,這就是爲什麼它只輸出最後一個元素的原因。

將其更改爲:

$items = array(

例如:

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

按照你的邏輯,輸出應該是:

Array 
(
    [foo] => bar 
) 

但它實際上是:

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

) 
+0

感謝您的回答 – Joshc

相關問題