2017-02-16 13 views
2

私は現在、次のように簡単なWHILEループが実行されている間で次のように$losPHPループループ混乱

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

内容は次のとおりです。

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

すべての細かい作業が、私は何を苦労しています私は第2の配列$outsを持っています。その内容は次のとおりです:

最初のwhileループ内で、のvalueを、ロケーション名が一致したときに、$losから差し引きようとしています。私は、whileループ内で、次を追加しようとしたんが、何の喜びしている:

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

しかし、私はそれを返すすべてがあり、whileループ内からprint_r($outs)を試してみましたが、また無喜び、:私は

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

私がどこに間違っているのか、これが可能であるかどうかは分かりません。 $outs配列は最初のループ内にあるので変更されていますか?どのように私はこれを達成するかもしれないかについて、あらゆるアイデア、提案、またはポインターを歓迎した。 2つの配列の内容を要求したとして

VARは、

ので、ダンプは以下のとおりです。

$ロス

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

$アウト

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

Iは$outsためvardump又はますprint_rときにwhile($los = $result->fetch_row())にある場合しかし、内容は次のとおり

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

更なるCODE

$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

「ロンドン=> 15 => 32」この表記で何を表示しようとしていますか?連想配列としてフェッチして、代わりにforeach-ingしてみましたか? – Ankh

+0

完全なPHPコードを教えてください。あなたの質問に十分なコードがない場合、私たちはあなたを助けることができません。 –

+1

これはwhile($ row19 = $ result19-> fetch_assoc()){ $ outs [] = $ row19です。 }あなたは$ outs変数を置き換えています。それを配列にしてください – rahulsm

答えて

1

var_dumpによって生成されたRAWコンテンツを投稿し、エラーを発生させるための完全ではあるが最小限のスクリプトを含めることを検討してください。

$outsが(1)Key-Value Arrayの場合や、(2)のサブアレイを含む場合は、ここで不明な点があります。

オプション1:

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

オプション2:この依存

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

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

私はテストのためにやったが、あなたの入力行は次のようになり仮定しますあなたは0123を調整する必要がありますあなたの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 > "; 
} 

我々は最初の$outs内citynameインデックスを検索する必要があるとして、それは、もう少しコードです 2オプションください。 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

建設的なフィードバックをありがとう。私は両方のオプションを見て、あなたに知らせるつもりです。また、フィードバックをいただければ幸いです。 'var_dumpによって生成されたRAWコンテンツを投稿し、完全ではあるが最小限のスクリプトを組み込んでエラーを生成することを検討してください。 –