为具有相同值的每组记录生成选择列表

时间:2011-06-08 15:30:29

标签: php arrays loops

我使用下面的数组来回显HTML选择框,但我无法弄清楚如何使用唯一值来进行循环:

sid     evid
13      1
14      1
15      2
16      3

我试图通过存储在'evid'中的唯一值来遍历上面的数组,因此我可以创建一个按'evid'分组的选择框。目前,我的循环产生了4个选择框,它应该只生成3. sid 13和14正在输出一个选择框,因为我的代码没有对它们进行分组但是我无法理解我是如何得到这两个循环期间要分组的值。

有人有任何建议吗?

修改

我正在使用的代码:

<?php while ($s = mysql_fetch_array($sessions)){ ?>
<?php foreach ($evs as $ev){ 
        if ($ev['evid'] == $s['evid']){     
?>

    <form action="" method="">
        <fieldset>
            <ul>
                <li>
                    <label></label>
                    <select name="sessions[]">
                        <option name="sessions[]" value="<?php echo $s['sid']; ?>"><?php echo $s['sname']; ?></option>
                    </select>
                </li>
            </ul>
        </fieldset>
    </form>

    <?php } // end if match ?>

    <?php } // end foreach ?>

<?php } // end while ?>

3 个答案:

答案 0 :(得分:1)

如果我很清楚您需要什么,并假设数组已排序,请尝试使用:

$sid  = array(13, 14, 15, 16);
$evid = array(1, 1, 2, 3);

$current_evid = $evid[0];
echo "<select .....>\n";
for ($i=0; $i<count($evid); $i++) {
    if ($current_evid != $evid[$i]) {
        echo "</select>\n";
        echo "<select ...>\n";
        $current_evid = $evid[$i];
    }
    echo "<option value=".$sid[$i].".....\n";
}
echo "</select>\n";

<强>输出:

<select .....>
<option value=13.....
<option value=14.....
</select>
<select ...>
<option value=15.....
</select>
<select ...>
<option value=16.....
</select>

答案 1 :(得分:0)

尝试使用PHP的array_unique - 详情请参阅:http://php.net/function.array-unique

或者 - 如果您使用MySQL之类的东西来获取数据,请尝试在GROUP BY声明中使用DISTINCTSELECT


每条评论的编辑:

如果您想/需要保留原始数组,只需复制数组,然后在副本上使用array_unique。然后,使用副本创建选择下拉列表。

替代solutoin:

保留$values_written数组。

在你的循环中,在你写<option>之前,检查它的值是否已经在$values_written中(使用PHP的in_array - details here

然后写下<option>

然后将它的值添加到数组中(使用PHP的array_push - details here

答案 2 :(得分:0)

将您的数组导入array_unique()

相关问题