2012-06-10 76 views
0

我目前正在尝试以下代码:通行证SQL阵列通过Zend_Form_Element_Select

$sql = $db->query("select id,username,fullname from userss ORDER BY fullname ASC"); 
     while($row = $sql->fetch()) { 
      $username[] = $row['username']; 
     } 
     $form = new Zend_Form(); 
     $form->setAction('/index/change') 
      ->setMethod('post'); 

     $element = new Zend_Form_Element_Select('foo', array(
      'multiOptions' => array(
       $username, 
       ))); 
     $form->addElement($element); 
     echo $form; 

期望的结果是示出了元件的<option value='username'>Full Name</option>形式<select>其中username是从SQL username和全名是从SQL fullname

眼下,它显示<option value='0'>Full Name</option>

我不太清楚如何指定数组的第一个部分,所以它基本上将用户名=>全名

有什么建议?谢谢!

回答

3

要设置Zend_Form_Element_Select中选项的值,数组键定义值,数组值定义用户看到的select中的文本。

试试这个:

$element = new Zend_Form_Element_Select('foo', array(
    'multiOptions' => array(
     $username => $fullname, 
     $username2 => $fullname2, 
))); 

你正在看到0,因为数组没有字符串键,它默认为使用数字索引数组键的值。

鉴于你的代码,你可以这样做:

$username = array(); 

while($row = $sql->fetch()) { 
    $username[$row['username']] = $row['fullname']; 
} 
+0

感谢您的回应!我给了这个镜头,但是在第一个代码中你的意思有点困惑。变量$ fullname和$ username2和$ fullname2来自哪里?我所拥有的唯一变量是在while循环中定义的$ username。 –

+0

这只是一个例子,如果您有多个项目(为选择框设置键=>值对),该数组可能看起来像什么样子。你可以用你发布的那个循环替换你的循环,并保持'multiOptions'=> array($ username)'原样;或者使用初学者的答案,因为如果你不需要任何用户id,fetchPairs也是一个很好的解决方案。 – drew010

+0

啊,谢谢。这个问题实际上是我在这篇文章中简化了我的查询(fullname不是一个实际的列......我需要连接两个表......因此$ username变量仍然变为0) –

2

为了填充选择元素更容易ZF提供fetchPairs

 $sql = "select username,fullname from userss ORDER BY fullname ASC"; 
     $db = Zend_Db_Table::getDefaultAdapter(); 
    $select = new Zend_Form_Element_Select('foo'); 
    $select->setMultiOptions($db->fetchPairs($sql)); 

这种方式把你从迭代的数据(,while循环)自己。