0

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

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

所需的结果是显示用户名来自 SQL 和全名来自 sql<select>的元素的表单。<option value='username'>Full Name</option>usernamefullname

现在,它显示<option value='0'>Full Name</option>

我不太确定如何指定数组的第一部分,以便它本质上是用户名 => 全名

有什么建议么?谢谢!

4

2 回答 2

3

要在 a 中设置选项的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'];
}
于 2012-06-10T05:44:22.903 回答
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 循环)。

于 2012-06-10T06:27:54.397 回答