2013-09-25 3 views
0

미리 렌더링 필터 중 하나를 사용하여 Wordpress 중력 양식을 채 웁니다.수동 PHP 배열 만 마지막 값을 반환합니다.

나는 항상 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을 반환한다.

왜 이런 일이 일어나는 지 알 수 있습니까?

감사합니다.

+1

배열에는 텍스트 키가있는 항목과 값 키가있는 항목이 하나만 있습니다. 모든 행에 값을 덮어 씀으로써 결국 ZUNDAPP만이 값으로 사용됩니다. – andrewsi

답변

4

동일한 키를 반복해서 정의하고 있습니다.

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

을 제공합니다 :

// v-- no [] here 
$items = array(
    array("text" => "", "value" => null), 
    array("text" => "YAMASAKI", "value" => "YAMASAKI"), 
    // etc. 
+0

아하이 봐요. 고마워요.이 작품을 만들 수 있습니다. – Joshc

2

나는 문제가 내장형 배열 구조에 의존 생각 :

array(array(
    "text" => "YAMASAKI", 
    "value" => "YAMASAKI" 
)); 

에서 당신이하려는 생각합니다.

하나의 요소 (배열) 만 추가합니다. 배열 자체에서 이전 키를 재정의하여 덮어 씁니다.

사용이 구문 :

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

당신은 직접 배열을 할당 할 수 있습니다 : 당신이 text을 덮어 쓰는

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

OK 제 생각에 맞는 것 같아요, 그게 캡슐화하는 더 짧은 방법이라면 확실하지 않았습니다. – Joshc

+0

큰 arrray가 어떻게 작동하거나 쓰여지겠습니까? – Joshc

+0

@ Joshc 내 업데이트를 참조하십시오. 배열을 직접 할당 할 수 있습니다. – ComFreek

0

value 매번 당신은 $items에 무언가를 삽입합니다.

가능성이 documention 당 등

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

로 값을 삽입 또는 배열의 개별 항목을 포장하는 방법이 필요합니다 : 문제있다

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

감사합니다. ryan – Joshc

0
$items[] = array(
     ^^ 

. 이로 인해 배열이 다차원 배열로 바뀌고 있습니다. 코드에서는 여전히 1 차원 배열로 가정하므로 마지막 요소 만 출력합니다.

변경 그것을 : 예를 들어

$items = array(

:

Array 
(
    [foo] => bar 
) 

그러나 그것은 사실이다 : 당신의 논리에 따르면

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

, 출력해야

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

) 
+0

답변 해 주셔서 감사합니다. – Joshc

관련 문제