我在while循环中收集标题和附带的数组,其中包含数据库中的组。
我的数据看起来像这样(请注意我需要更多字段,但为了简单起见,我只显示两个字段):
**Title** | **Groups**
Random Title One | array(Group A)
Another Title | array(Group A, Group B, Group C, Group D, Group E)
我通过while循环遍历每一行。现在我想通过集团展示这一点。像这样:
Group A: Random Title One, Another Title
Group B: Another Title
Group C: Another Title
Group D: Another Title
Group E: Another Title
我看到处理此问题的最佳方法是在while循环中使用foreach循环遍历Groups。 这看起来像这样:
<?php
foreach ($arrayGroups as $group) {
switch ($group) {
case "Group A":
$arrGroupA[]['title'] = $title;
break;
case "Group B":
$arrGroupB[]['title'] = $title;
break;
case "Group C":
$arrGroupC[]['title'] = $title;
break;
case "Group D":
$arrGroupD[]['title'] = $title;
break;
case "Group E":
$arrGroupE[]['title'] = $title;
break;
}
}
?>
然而,即使我知道不超过五个小组,我也不喜欢这样,并怀疑这是否是最好的方法。
有什么想法吗?
答案 0 :(得分:1)
您可以尝试将它们放在一个数组中,例如:
foreach ($arrayGroups as $group) {
$groups[$group][] = array(
'title' => $title,
);
}
这样您可以使用$groups[groupName][some index]['title']
不确定性能是否更快,但它允许您自动输入可变数量的组。
答案 1 :(得分:0)
如果你知道你的结果总是有序,那就说吧
array(Group A, Group B, Group C, Group D, Group E)
或
array(Group A, Group D, Group E)
等
您可以通过每次都不执行所有比较来提高效率。换句话说,不要做A组&#39;比较如果你在记录的数组中的第二组,作为&#39;组A&#39;总是先出现。你仍然想要&#34;短路&#34;当你的比赛像你的'休息'一样出局时正在做转换。
这里有一些类似java的伪代码抱歉我不是一个php家伙:
//traverse all groups for the current record
for (int i=0; i<currentRecordGroups.length; i++) {
// traverse the possible groups, starting with the index of the
// current group from the current record (allGroups must also be sorted)
for(int j = i; j<allGroups.length; j++) {
if(currentRecordGroups[i] == allGroups[j]) {
// add the title to the collection for group allGroups[j] here...
break; //break for j
}
}
}