PHP:对于每个不同的键值,将它们组合在一起

时间:2014-06-02 07:11:10

标签: php mysql loops foreach

我有这个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。 我认为我必须在我的foreach中使用另一个foreach。

5 个答案:

答案 0 :(得分:4)

构建阵列时,请将阵列的键设为公司名称或公司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>';
};

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

让我们开始吧:

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

答案 3 :(得分:0)

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

** Haven没有测试过它。

答案 4 :(得分:0)

我希望这能解决你的问题

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