PHP:对于每个不同的键值,分组在一起

PHP:对于每个不同的键值,分组在一起,php,mysql,loops,foreach,Php,Mysql,Loops,Foreach,我有一个mysql示例表: +----+---------------+-------+ | id | company | value | +----+---------------+-------+ | 1 | google | 50 | +----+---------------+-------+ | 2 | microsoft | 24 | +----+---------------+-------+ | 3 | google

我有一个mysql示例表:

+----+---------------+-------+
| 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>';
};