【问题标题】:Loop through mysqli results array once to get all information循环一次mysqli结果数组以获取所有信息
【发布时间】:2014-08-17 19:49:05
【问题描述】:

我正在查询数据库中的数据,但为了做我需要的事情,我最终至少循环了该结果数组 3 次。如何在不必循环多次的情况下从数组中获取我需要的所有信息?我需要根据之前循环的结果从数组中获取数据。下面的代码是我能找出的唯一方法,以便只查询一次数据库。

$recordSQL = mysqli_query($link, $sqlString);
$resultMonths = array();
while($recordResult = mysqli_fetch_assoc($recordSQL)) $resultMonths[] = $recordResult['date'];
mysqli_data_seek($recordSQL, 0);
$uniqueMonths = array_unique($resultMonths);
foreach($uniqueMonths as $key => $date){
    echo '</div><div class="current-month">'.translateDate($date, '').'</div>';
    $resultCompanies = array();
    while($companyResult = mysqli_fetch_assoc($recordSQL)){
        if($companyResult['date'] == $date) $resultCompanies[] = $companyResult['company'];
    }
    mysqli_data_seek($recordSQL, 0);
    $uniqueCompanies = array_unique($resultCompanies);
    $oldco = '';
    foreach($uniqueCompanies as $key => $company){
        $x = 0;
        while($typeResult = mysqli_fetch_assoc($recordSQL)){
            if($typeResult['date'] == $date && $typeResult['company'] == $company){
                if($oldco != $typeResult['company']){
                    if($x != 0) echo '</div>';
                    echo '<div class="company-record">'.$typeResult['name'].' - ';
                }
                if($x > 0) echo ', ';
                echo translateID('Type', $typeResult['type']).'('.translateID('Section', $typeResult['section']).')';
                $oldco = $typeResult['company'];
                $x++;
            }
        }
        echo '</div>';
        mysqli_data_seek($recordSQL, 0);
    }
}

【问题讨论】:

    标签: php mysql arrays multidimensional-array mysqli


    【解决方案1】:

    仅供参考,您实际上循环了 N**3 次。这样做:

    $month_company_rows = array();
    while ($row = mysqli_fetch_assoc($recordSQL)) {
        $month_company_rows[$row['date']][$row['company']][] = $row;
    }
    
    foreach ($month_company_rows as $date => $company_rows) {
        echo '</div><div class="current-month">'.translateDate($date, '').'</div>';
    
        foreach ($company_rows as $company => $rows) {
            echo '<div class="company-record">'.$company.' - ';
    
            foreach ($rows as $x => $row) {
                if($x > 0) echo ', ';
                echo translateID('Type', $row['type']).'('.translateID('Section', $row['section']).')';
            }
    
            echo '</div>';
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-27
      • 2015-10-05
      • 2016-11-23
      • 2010-12-02
      相关资源
      最近更新 更多