вложенный цикл foreach, дающий странный инкрементный результат

#php #mysql #arrays #nested-loops

#php #mysql #массивы #вложенные циклы

Вопрос:

Я планирую создать таблицу html, заполненную местоположениями, за которыми следуют 2 подкатегории объектов, все извлеченные из базы данных и сохраненные в массиве PHP. Что-то странное происходит с моим foreach циклом.

     $loc_query = "SELECT Location FROM Locations;";
    $loc_result = $mysqli->query($loc_query);

    while($row = $loc_result->fetch_assoc()){
    $loc_results[] = $row;
    }


    foreach($loc_results as $loc){
        echo '<tr align="right"><td width="20" align="center" onmousedown="show()" bordercolor="#000000"
         style="cursor:pointer;font-size:10pt;font-weight:bold;border-style:solid;border-width:1pt"> </td>
         <td width="120" align="left" 
         bgcolor="#00FFFF" style="border-top-style:solid;border-top-width:1pt;border-right-style:solid;
         border-right-width:1pt;border-bottom-style:solid;border-bottom-width:1pt" >'.$loc['Location'].'</td></tr>';

        $CC_query = "SELECT Cost_Center_Category.Cost_Center_Category_Name, Cost_Center_Name, 
        Locations.Location_Abbrev, Locations.Location, LC, 
        FX, RR_In_LC, Hours 
        FROM Cost_Centers 
        LEFT JOIN Cost_Center_Category 
        ON Cost_Centers.Cost_Center_Category = Cost_Center_Category.Cost_Center_Category_ID 
        LEFT JOIN Locations ON Cost_Centers.Location = Locations.Location_Abbrev;";

        $CC_result = $mysqli->query($CC_query);


        while($row = $CC_result->fetch_assoc()){
            $CC_results[] = $row;
        }

        foreach ($CC_results as $result){
            switch($result['Cost_Center_Category_Name'])
            {
                case 'Strategy amp; Performance' :
                    echo '<tr align="right"><td width="20" align="center" onmousedown="show()" bordercolor="#000000"
                     style="cursor:pointer;font-size:10pt;font-weight:bold;border-style:solid;border-width:1pt"> </td>
                     <td width="150" align="left"
                      bgcolor="#FFCC00" 
                      style="border-top-style:solid;border-top-width:1pt;border-right-style:solid;
                      border-right-width:1pt;border-bottom-style:
                      solid;border-bottom-width:1pt"
                       onmousedown="show()">'.$result['Cost_Center_Category_Name'].'</td></tr>';

                    break;

            }
        }
    }
  

Он выводит все местоположения нормально, но как только я пытаюсь заполнить каждое местоположение категорией центра затрат, он выводит что-то вроде

  • Нюрнберг
  • Стратегия и производительность
  • Regensburg
  • Стратегия и производительность
  • Стратегия и производительность
  • Sibiu
  • Стратегия и производительность
  • Стратегия и производительность
  • Стратегия и производительность

и он растет каждый раз. Я знаю, что это должно быть как-то связано с моей логикой, я пробовал такие вещи, break 2 и я думаю, что я слишком долго смотрел на это, это, вероятно, действительно очевидно. Что-то не так с тем, как я настраиваю вложенные циклы, или это что-то еще?

Ответ №1:

Сброс $CC_results в пустой массив на каждой итерации foreach цикла:

 foreach($loc_results as $loc) {
    $CC_results = array();

    // all other code stays the same

}
  

Комментарии:

1. ты спасатель! Спасибо!