我目前正在尝试以下代码:
$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;全名
有什么建议吗?谢谢!
答案 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循环)。