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


PHP: For each different key value, group together

我有这个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>

这是我当前的代码:

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

但我的代码把整个公司打印在一起。

编辑:

我想把公司分成不同的UL。我认为我必须在前臂内侧使用另一个前臂

在构建数组时,请将数组的关键字设置为公司名称或公司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>';
};

让我们开始:

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

当然还有其他方法可以做到这一点,为了简单起见,我使用了两个不同的循环。

$companies = array(); 
//One array that will have companies' names as keys
// and the value would be an array of values.
$resultx = mysql_query();
while ($row = mysql_fetch_array($resultx)) {
  $companies[ $row['company'] ][] = $row['value'];
}
foreach ($companies as $company => $values) { //Loop the companies
   echo '<ul class="'.$company.'">';
   foreach($values as $value) //Loop the values of that company
   {
    echo '<li>'.$value.'</li>';
   }
   echo '</ul>';
}

**尚未测试。

我希望这将解决您的问题

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