通过Zend_Form_Element_Select传递SQL数组

时间:2012-06-10 05:23:10

标签: php zend-framework zend-form

我目前正在尝试以下代码:

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

所需的结果是显示元素<select>的{​​{1}}表单,其中来自SQL的用户名为<option value='username'>Full Name</option>,而来自sql的全名为username

现在,它显示fullname

我不太确定如何指定数组的第一部分,因此它基本上是username =&gt;全名

有什么建议吗?谢谢!

2 个答案:

答案 0 :(得分:3)

要在Zend_Form_Element_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'];
}

答案 1 :(得分: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));

这样可以避免您自己迭代数据(for,while循环)。