2011-02-16 40 views
0

以某種形式使用form_dropdown使用下列選項:形式幫助下拉微調

<select name="depto"> 
<option value="">[todos los departamentos]</option> 
<option value="0001">First</option> 
<option value="01">Second</option> 
</select> 

當領域擁有的空任何不同的值,即「0001」或「01」,在兩種情況下form_dropdown生成

<select name="depto"> 
<option value="">[todos los departamentos]</option> 
<option selected="selected" value="0001">First</option> 
<option selected="selected" value="01">Second</option> 
</select> 

標記爲選中的2個選項。

查看窗體幫助器,in_array()函數用於檢查值。

我改變了form_helper使用完全匹配來調用in_array(),這是第三個參數爲'true',並開始按照預測工作。

您是否發現該變更有任何問題? 的微小變化都標有/// HERE THE ,true ADDED

下面是函數的代碼:

/** 
* Drop-down Menu 
* 
* @access public 
* @param string 
* @param array 
* @param string 
* @param string 
* @return string 
*/ 
if (! function_exists('form_dropdown')) 
{ 
    function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '') 
    { 
     if (! is_array($selected)) 
     { 
      $selected = array($selected); 
     } 

     // If no selected state was submitted we will attempt to set it automatically 
     if (count($selected) === 0) 
     { 
      // If the form name appears in the $_POST array we have a winner! 
      if (isset($_POST[$name])) 
      { 
       $selected = array($_POST[$name]); 
      } 
     } 

     if ($extra != '') $extra = ' '.$extra; 

     $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : ''; 

     $form = '<select name="'.$name.'"'.$extra.$multiple.">\n"; 

     foreach ($options as $key => $val) 
     { 
      $key = (string) $key; 

      if (is_array($val)) 
      { 
       $form .= '<optgroup label="'.$key.'">'."\n"; 

       foreach ($val as $optgroup_key => $optgroup_val) 
       { 
        $sel = (in_array($optgroup_key, $selected, true)) ? ' selected="selected"' : ''; /// HERE THE ,true added 

        $form .= '<option value="'.$optgroup_key.'"'.$sel.'>'.(string) $optgroup_val."</option>\n"; 
       } 

       $form .= '</optgroup>'."\n"; 
      } 
      else 
      { 
       $sel = (in_array($key, $selected, true)) ? ' selected="selected"' : ''; /// HERE THE ,true ADDED 

       $form .= '<option value="'.$key.'"'.$sel.'>'.(string) $val."</option>\n"; 
      } 
     } 

     $form .= '</select>'; 

     return $form; 
    } 
} 
+1

沒有使用過codeigniter,這是一個隨機猜測(所以沒有回答)。但PHP處理以0開頭的數字作爲二進制數字。這意味着01等於1.我想這同樣適用於0001,因爲它也是1的二進制。 – 2011-02-16 17:16:46

回答

0

嘗試鑄造自己的價值觀像下面的例子串並看看是否能工程。

$deptolist = array((string)'0001' => 'First', (string)'01' => 'Second');