PHP foreach,如何从数组中的键循环

时间:2017-10-09 08:18:52

标签: php

我有一个从数据库返回的数组,我试图回显每个字段的输出,IDS在内部是相同的,然后转到下一个ID,直到完成。所以它打印出所有的ID" 1s"然后" 2s"然后当它完成它停止。 ID的数量从1-950变化。

array ( 0 => stdClass::__set_state(array
( 'Year' => '2017', 
'Month' => 'January',
 'name' => 'Faults', 
'id' => '1', 
'value' => '14058', )),



1 => stdClass::__set_state(array( 
'Year' => '2017',
 'Month' => 'February', 
'name' => 'Faults', 
'id' => '1', 
 'value' => '21', )),




2 => stdClass::__set_state(array
( 'Year' => '2017',
 'Month' => 'January',
 name' => 'Errors', 
'id' => '2', 'value' => '22874', )), 

3 => stdClass::__set_state(array( 
'Year' => '2017', 
'Month' => 'February', 
'name' => 'Errors',
'id' => '2',  
'value' => '2650', )), )

我正在尝试实现这样的输出:

January 2017 Faults = 14958
February 2017 Faults = 21

这里的HTML格式化分解/在

之间划分一行
January 2017 Errors = 22784
February 2017 Errors = 2650 

使用此foreach语法:

foreach ($results as $result) :
    if ($result->id == 1){
        echo   '<td>', $result->Month, '</td>';

这有效但我需要更新if语句,这不是一个好的解决方案

如何更改此内容以使其查看数组内部并仅为每个&#34; id&#34;输出HTML?

我已经尝试foreach ($results =>id as $result)但它不起作用。这是正确的想法吗? 什么是正确的语法?

谢谢!

1 个答案:

答案 0 :(得分:0)

我正在使用array_multisort文档中的此功能。这应该适合你。我已经按照id对数组进行了排序。我们保存id,如果下一个包含它,我们将输出html代码。

    $results = array_msort($results , array('id'=>SORT_ASC));

    function array_msort($array, $cols){
      $colarr = array();
     foreach ($cols as $col => $order) {
         $colarr[$col] = array();
         foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); }
      }
      $eval = 'array_multisort(';
      foreach ($cols as $col => $order) {
          $eval .= '$colarr[\''.$col.'\'],'.$order.',';
       }
       $eval = substr($eval,0,-1).');';
       eval($eval);
       $ret = array();
       foreach ($colarr as $col => $arr) {
           foreach ($arr as $k => $v) {
               $k = substr($k,1);
              if (!isset($ret[$k])) $ret[$k] = $array[$k];
                $ret[$k][$col] = $array[$k][$col];
            }
       }
       return $ret;

    }

    $oldId = 0;
    foreach ($results as $res){
        if($oldId == $res->id){
             echo   '<td>', $res->Month, '</td>';
             //plus other output display
        }
        $oldId = $res->id;
    }