PHP:对于每个不同的键值,分组在一起
我有一个mysql示例表:PHP:对于每个不同的键值,分组在一起,php,mysql,loops,foreach,Php,Mysql,Loops,Foreach,我有一个mysql示例表: +----+---------------+-------+ | id | company | value | +----+---------------+-------+ | 1 | google | 50 | +----+---------------+-------+ | 2 | microsoft | 24 | +----+---------------+-------+ | 3 | google
+----+---------------+-------+
| id | company | value |
+----+---------------+-------+
| 1 | google | 50 |
+----+---------------+-------+
| 2 | microsoft | 24 |
+----+---------------+-------+
| 3 | google | 12 |
+----+---------------+-------+
| 4 | microsoft | 89 |
+----+---------------+-------+
| 5 | stackoverflow | 45 |
+----+---------------+-------+
而且我想这样打印,以便按公司分组:
<ul class="google">
<li>50</li>
<li>12</li>
</ul>
<ul class="microsoft">
<li>24</li>
<li>89</li>
</ul>
<ul class="stackoveflow">
<li>45</li>
</ul>
- 五十
- 十二,
- 二十四
- 89
- 45
这是我当前的代码:
$resultx = mysql_query();
$temp=0;
$p = array();
while ($row = mysql_fetch_array($resultx)) {
$p[$temp]['id']=$row['id'];
$p[$temp]['company']=$row['company'];
$p[$temp]['value']=$row['value'];
$temp++;
}
foreach ($p as $obj) {
echo '<ul class="'.$obj["company"].'"><li>'.$obj["value"].'</li></ul>';
};
$resultx=mysql\u query();
$temp=0;
$p=array();
while($row=mysql\u fetch\u数组($resultx)){
$p[$temp]['id']=$row['id'];
$p[$temp]['company']=$row['company'];
$p[$temp]['value']=$row['value'];
$temp++;
}
foreach($p作为$obj){
回显“- ”.$obj[“value”]”.
;
};
但我的代码将所有公司打印在一起
编辑:
我想把公司分成不同的UL。
我假设我必须在我的foreach中使用另一个foreach。$resultx=mysql\u query();
$resultx = mysql_query();
$temp=0;
$companies = array();
while ($row = mysql_fetch_array($resultx)) {
$companies[$row['company']][]=$row;
}
foreach ($companies as $company=>$values) {
echo '<ul class="'.$company.'">';
foreach($values as $value){
echo '<li>'.$value["value"].'</li>';
}
echo'</ul>';
}
$temp=0;
$companys=array();
while($row=mysql\u fetch\u数组($resultx)){
$companys[$row['company'][]=$row;
}
foreach($公司为$公司=>$价值){
回声“”;
foreach($value作为$value){
回显“- ”.$value[“value”]。
”;
}
回声“
”;
}
当然还有其他的方法,为了简单起见,我使用了两种不同的循环。让我们开始:
SELECT * FROM `yourTableName` ORDER BY `company`
然后你要这样做:
for($i = 0; $i<sizeOf($p); $i++)
{
if ($p[$i] == 0 || $p[$i]['company'] != $p[$i-1]['company'])
echo '<ul class="'.$obj["company"].'">';
ecoh '<li>'.$obj["value"].'</li>';
if ($p[$i] == 0 || $p[$i]['company'] != $p[$i-1]['company'])
echo '</ul>';
}
对于($i=0;$i在构建数组时,将数组的键设置为公司名称或公司id。因为我在查询中没有看到公司id,所以我将使用名称。现在,将其设置为一个多数据数组,内部数组开始值
$resultx = mysql_query();
$p = array();
while ($row = mysql_fetch_array($resultx)) {
$p[$row['company']]['id']=$row['id'];
$p[$row['company']]['company']=$row['company'];
$p[$row['company']]['values'][]=$row['value'];
}
foreach ($p as $obj) {
echo '<ul class="'.htmlspecialchars($obj["company"]).'">';
foreach ($obj['values'] as $value) {
echo '<li>'.htmlspecialchars($value).'</ul>';
}
echo '</ul>';
};
$resultx=mysql\u query();
$p=array();
while($row=mysql\u fetch\u数组($resultx)){
$p[$row['company']['id']=$row['id'];
$p[$row['company']['company']=$row['company'];
$p[$row['company']['values'][]=$row['value'];
}
foreach($p作为$obj){
echo'”;
foreach($obj['values']作为$value){
echo'- ”.htmlspecialchars($value)。
;
}
回声“”;
};
$companys=array();
//一个将公司名称作为键的数组
//这个值将是一个值数组。
$resultx=mysql_query();
while($row=mysql\u fetch\u数组($resultx)){
$companys[$row['company'][]=$row['value'];
}
foreach($companys as$company=>$values){//循环公司
回声“”;
foreach($values as$value)//循环该公司的值
{
回显“- ”.$value.“
”;
}
回声“
”;
}
**还没有测试过。我希望这能解决您的问题
$p = array(array());
while ($row = mysql_fetch_array($resultx)) {
$p[$row['company']][] = $row['value'];
}
foreach ($p as $key => $obj) {
echo '<ul class="'.$key.'">';
foreach ($obj as $val) {
echo '<li>'.$val.'</li>';
}
echo '</ul>';
};
$p=array(array());
while($row=mysql\u fetch\u数组($resultx)){
$p[$row['company'][]=$row['value'];
}
foreach($p作为$key=>$obj){
echo“”;
外币($obj作为$val){
回音“- ”.$val.
”;
}
回声“
”;
};
在您的查询中使用分组方式
我无法理解拥有近3k代表的人是如何提出这样的问题的:(您需要将值放入array@Lashane-也许OP在另一个领域有经验,比如jQuery,他是PHP的新手。是的,这两种方法都是可以接受的,但代码总是令人困惑。为什么要使用两个循环而不是一个循环呢?我猜,Ofir希望将每个结果列为一行。@OFIRBRUCH不管是哪种语言,都是关于一般的编程和理解它是如何工作的,有1个代表的人提出了很多这样的问题-我可以理解这一点,但这里是…我相信OP希望按公司分组行,因为同一公司有多行。我想将行分组到不同的UL's,实际上我喜欢你回答得比我的好,+1
$p = array(array());
while ($row = mysql_fetch_array($resultx)) {
$p[$row['company']][] = $row['value'];
}
foreach ($p as $key => $obj) {
echo '<ul class="'.$key.'">';
foreach ($obj as $val) {
echo '<li>'.$val.'</li>';
}
echo '</ul>';
};