2017-02-16 3 views
2

настоящее время у меня простой WHILE цикл работает следующим образом:PHP Loop с While Loop путаница

while($los = $result->fetch_row()) 
    { 
     echo"<tr><td>".$los[0]."</td>"; 
     echo"<td>".$los[1]."</td>"; 
     echo"<td>".$los[2]."</td></tr>"; 
    } 

Содержание $los выглядит следующим образом:

London => 15 => 32 
Glasgow => 23 => 45 
Leeds  => 1 => 12 
Truro  => 5 => 23 

Все работает нормально, но то, что я изо всех сил с тем, что у меня есть второй массив $outs, содержание которого:

London => 3 
Glasgow => 5 
Liverpool => 2 
Poole  => 1 

В течение первого цикла while Я пытаюсь вычесть value за $outs от $los, когда совпадает название места. Я попытался добавить следующее внутри цикла в то время, но нет радости:

if($los[0] == $outs[0]){ 
    $los[1] = $los[1]-$outs[1]; 
} 

Но не радость, и когда я попытался print_r($outs) внутри цикла в то время, она возвращает всего:

Poole  => 1 
Poole  => 1 
Poole  => 1 
Poole  => 1 

I не может понять, где я ошибаюсь или даже если это возможно. Изменен ли массив $outs, поскольку он находится в первом цикле? Любые идеи, предложения или указатели приветствовали то, как я могу это достичь.

ВДП свалках

Таким образом, в соответствии с просьбой содержимое двух массивов:

$ лос

London => 15 => 32 
Glasgow => 23 => 45 
Leeds  => 1 => 12 
Truro  => 5 => 23 

$ аутов

London => 3 
Glasgow => 5 
Liverpool => 2 
Poole  => 1 

Однако, когда я vardump или print_r для $outs, когда он находится в while($los = $result->fetch_row()) содержимое:

Poole  => 1 
Poole  => 1 
Poole  => 1 
Poole  => 1 

ДАЛЕЕ КОД

код, чтобы получить массив для $outs является:

$query19 = "SELECT Country, COUNT(Country), Resp FROM `tresults_` WHERE q39 = 'Complete' GROUP BY Country;"; 

$result19 = $mysqli->query($query19); 

while($row19 = $result19->fetch_assoc()){ 
    $outs = $row19; 
} 
+0

'London => 15 => 32' что вы пытаетесь обозначить этими обозначениями? Вы пробовали выборку как ассоциативный массив и foreach-ing вместо этого? – Ankh

+0

Покажите нам свой полный PHP-код. Мы не можем вам помочь, если у вашего Вопроса недостаточно кода. –

+1

Это должно быть while ($ row19 = $ result19-> fetch_assoc()) { $ outs [] = $ row19; } вы заменяете переменную $ outs, пожалуйста, сделайте массив – rahulsm

ответ

1

Просьба учесть содержимое RAW, которое было создано var_dump, и включить полный, но минимальный скрипт для получения ошибки.

Что здесь непонятно, может быть, если $outs является (1) ключ-значение массива или если он (2) содержит подмассивы.

Вариант 1:

$outs = [ 
    "London" => 3, 
    "Glasgow" => 5, 
    "Liverpool" => 2, 
    "Poole"  => 1 
]; 

Вариант 2:

$outs = [ 
    ["London", 3], 
    ["Glasgow", 5], 
    ["Liverpool", 2], 
    ["Poole", 1] 
]; 

я сделал для тестирования Предположим, ваши входные строки выглядят следующим образом:

$citys = [ 
    ["London", 15, 32], 
    ["Glasgow", 23, 45], 
    ["Leeds", 1, 12], 
    ["Truro", 5, 23] 
]; 

В зависимости от этого вы можете настроить if внутри вашего цикла while.

Для вариант 1:

foreach ($citys as $los) { 
    if (array_key_exists($los[0], $outs)) { 
     $los[1] = $los[1] - $outs[$los[0]]; 
    } 

    echo " <tr><td > " . $los[0] . "</td > "; 
    echo "<td > " . $los[1] . "</td > "; 
    echo "<td > " . $los[2] . "</td ></tr > "; 
} 

Для вариант 2 это немного больше кода, так как нам нужно искать индекс CITYNAME внутри $outs первого. В php> 5.5 это можно сделать, используя array_column, что было бы проще.

foreach ($citys as $los) { 
    $indexInOuts = null; 
    foreach($outs as $index => $out){ 
     if($los[0] === $out[0]){ 
      $indexInOuts = $index; 
      break; 
     } 
    } 

    if($indexInOuts !== null){ 
     $los[1] = $los[1] - $outs[$indexInOuts][1]; 
    } 

    echo " <tr><td > " . $los[0] . "</td > "; 
    echo "<td > " . $los[1] . "</td > "; 
    echo "<td > " . $los[2] . "</td ></tr > "; 
} 

Выход для обоих вариантов было бы как:

London 12 32 
Glasgow 18 45 
Leeds 1 12 
Truro 5 23 

И, как указано в комментариях вы заменяете $ аутов каждый раз. Поэтому отредактируйте его так, чтобы он выглядел так:

$outs = []; 
while ($row19 = $result19->fetch_assoc()) { 
    $outs[] = $row19; 
} 
+0

Спасибо за конструктивную обратную связь. Я собираюсь взглянуть на оба варианта и дам вам знать. Также оцените обратную связь re. 'Пожалуйста, подумайте о том, чтобы опубликовать содержимое RAW, которое было создано var_dump, и включить полный, но минимальный скрипт, чтобы создать ошибку.' –