0

我正在这样做:

$sql_glassware = 'SELECT id, name FROM glassware';
$qry_glassware = $con->query($sql_glassware);
$get_glassware = $qry_glassware->fetchAll(PDO::FETCH_ASSOC);
debug($get_glassware);

debug()是个人功能;它返回这样的结果:

$get_glassware = array(19) {
    [0]=>array(2) {
        ["id"]=>string(1) "1"
        ["name"]=>string(8) "Cocktail"
    }
    [1]=>array(2) {
        ["id"]=>string(1) "2"
        ["name"]=>string(9) "Margarita"
    }
    [2]=>array(2) {
        ["id"]=>string(1) "3"
        ["name"]=>string(8) "Highball"
    }
    ...
}

我猜第一个数组级别是行,第二个级别是列。
不知道为什么它会将 id 作为字符串返回...

然后我正在使用一个类来构造一个完整的表单;我有一个名为的公共函数addSelect(),其中第一个参数采用一组值来构建选项列表:array('name0','name1', 'name2','...')并在里面执行一个foreach()-loop:

public function addSelect($opt=array(),$param=array())
    $name = $this->useEither($param['name'],'dropdown-list');  //  useEither() is a personal function
    foreach ($opt as $val => $name){
        $options .= '<option value="'.$val.'">'.$name.'</option>';
    }
    $select = '<select name="'.$name.'" '.$param['string'].'>'.$options.'</select>';
    $this->formElements[] = $select;  //  store the list for use later
}

如何重新编写这个小函数,以便我可以$get_glassware直接将第一个参数传递给我的函数并让它输出如下选项:

<option value="1">Cocktail</option>
<option value="2">Margarita</option>
<option value="3">Highball</option>
4

2 回答 2

1

试试这个:

public function addSelect($opt=array(),$param=array())
    $name = $this->useEither($param['name'],'dropdown-list');  //  useEither() is a personal function
    foreach ($opt as $option){
        $options .= '<option value="'.$option['id'].'">'.$option['name'].'</option>';
    }
    $select = '<select name="'.$name.'" '.$param['string'].'>'.$options.'</select>';
    $this->formElements[] = $select;  //  store the list for use later
}
于 2012-07-19T11:47:44.943 回答
1

我不确定你为什么或者你想在那里做什么,但是你在 addSelect 中的 foreach 覆盖了 $name 变量。

但据我了解您的问题,这应该可以解决您的问题。

foreach ($opt as $val => $name){
    $options .= '<option value="' . $name['id'] . '">' . $name['name'] . '</option>';
}

对于调试功能...通常 print_r 比 var_dump 更容易阅读,但有时可能仍然需要调试。

于 2012-07-19T11:47:57.270 回答