生成记录每个组选择列表具有相同值
我使用下面的阵列来呼应一个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 ?>
尝试使用PHP的array_unique
- 这里的细节:http://php.net/function.array-unique
或者 - 如果你正在使用像MySQL的东西拿到数据,请在SELECT
声明中尝试使用GROUP BY
或DISTINCT
。根据注释
编辑:
如果你想/需要保留原来的阵列,刚才复制的阵列,并且在复制使用array_unique
。然后,使用副本创建选择下拉菜单。
替代solutoin:
保持一个$values_written
阵列。
在你的循环,你写的<option>
之前,检查它的价值是不是已经在$values_written
(使用PHP的in_array
- details here)
然后写<option>
。
然后加入它的价值的数组(使用PHP的array_push
- details here)
我认为array_unique删除重复的值 - 我仍然想保留键 - >值,但我只是想知道值是相同的,并将它们组合在一起。 – chocolatecoco 2011-06-08 15:33:57
@chocolatecoco - 对,但如果你只是给array_unique设置一个新变量...就像$ arrayCopy = $ myArray; array_unique($ arrayCopy) - 然后使用$ arrayCopy作为循环。 – Dave 2011-06-08 15:35:59
这听起来像它会起作用,我会试一试。 – chocolatecoco 2011-06-08 15:39:07
喂你的数组array_unique()
我想重复的值,所以这个功能不适合我。我需要能够告诉PHP循环独特的'evid',但保留'sid' – chocolatecoco 2011-06-08 15:36:45
如果我明白你需要很好的东西,并假设数组排序,有一试:
$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 ...我会说这是做什么标题指定 – 2011-06-08 17:02:22
你从哪里得到数据?如果它来自数据库,则可能需要考虑优化查询以使用“distinct”或“group by”子句,而不是在循环中执行此操作,这可能效率较低。 – mdm 2011-06-08 15:32:47
数据来自MySQL数据库。我得到的数据是我想要和需要的 - 我只需要能够告诉PHP通过唯一的'evid'循环 – chocolatecoco 2011-06-08 15:35:30
请考虑重新措辞您的问题。你的问题标题说“只有唯一的”,但你是无效的建议'array_unique()',因为你想保持重复的答案。这没有意义。 – 2011-06-08 15:48:17