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

问题描述:

我使用下面的阵列来呼应一个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 ?> 
+0

你从哪里得到数据?如果它来自数据库,则可能需要考虑优化查询以使用“distinct”或“group by”子句,而不是在循环中执行此操作,这可能效率较低。 – mdm 2011-06-08 15:32:47

+0

数据来自MySQL数据库。我得到的数据是我想要和需要的 - 我只需要能够告诉PHP通过唯一的'evid'循环 – chocolatecoco 2011-06-08 15:35:30

+0

请考虑重新措辞您的问题。你的问题标题说“只有唯一的”,但你是无效的建议'array_unique()',因为你想保持重复的答案。这没有意义。 – 2011-06-08 15:48:17

尝试使用PHP的array_unique - 这里的细节:http://php.net/function.array-unique

或者 - 如果你正在使用像MySQL的东西拿到数据,请在SELECT声明中尝试使用GROUP BYDISTINCT。根据注释


编辑:

如果你想/需要保留原来的阵列,刚才复制的阵列,并且在复制使​​用array_unique。然后,使用副本创建选择下拉菜单。

替代solutoin:

保持一个$values_written阵列。

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

然后写<option>

然后加入它的价值的数组(使用PHP的array_push - details here

+1

我认为array_unique删除重复的值 - 我仍然想保留键 - >值,但我只是想知道值是相同的,并将它们组合在一起。 – chocolatecoco 2011-06-08 15:33:57

+0

@chocolatecoco - 对,但如果你只是给array_unique设置一个新变量...就像$ arrayCopy = $ myArray; array_unique($ arrayCopy) - 然后使用$ arrayCopy作为循环。 – Dave 2011-06-08 15:35:59

+0

这听起来像它会起作用,我会试一试。 – chocolatecoco 2011-06-08 15:39:07

喂你的数组array_unique()

+0

我想重复的值,所以这个功能不适合我。我需要能够告诉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> 
+0

+1 ...我会说这是做什么标题指定 – 2011-06-08 17:02:22