2017-09-30 15 views
0

SQLで2回表示されても、同じことを2回エコーしないために、以下のコードでクエリからのSQL情報を配列と比較します。SQLとの配列比較

問題は、エコーが2回発生するという問題です。私はどのように配列の変化を確認するために、すべてのループにprint_rを使用し、ここでそれに沿ってない方法である:

アレイ()

アレイ([0] => my_preset)

アレイ([ 0] => my_preset [1] => test_preset)

PHPコード:

$parentArray = array(); 
$sql = "SELECT * FROM wb_values"; 
$result = mysqli_query($conn, $sql); 

while ($row = $result->fetch_assoc()) { 
    print_r($parentArray); 
    if (!in_array($row['parentID'], $parentArray)) { 
     array_push($parentArray, $row['parentID']); 

     foreach ($parentArray as $parent) { 
      $sqlParent = "SELECT * FROM presets WHERE id='$parent'"; 
      $resultParent = mysqli_query($conn, $sqlParent); 
      while ($row = $resultParent->fetch_assoc()) { 

      echo "<div class='section'> 
        <div class='left-mark'></div> 
        <p class='text'> ".$row['preset_name']." </p> 
       </div>"; 

      } 

     } 

    } 
} 

答えて

1

問題は、ループ内にループ内にforeachがあることです。新しいプリセットが追加されるたびに、配列に含まれる残りのプリセットも印刷されます。ループの後にforeachを置くだけで正常に動作するはずです:

$parentArray = array(); 
$sql = "SELECT * FROM wb_values"; 
$result = mysqli_query($conn, $sql); 

while ($row = $result->fetch_assoc()) { 
    print_r($parentArray); 
    if (!in_array($row['parentID'], $parentArray)) { 
     array_push($parentArray, $row['parentID']); 
    } 
} 

foreach ($parentArray as $parent) { 
    $sqlParent = "SELECT * FROM presets WHERE id='$parent'"; 
    $resultParent = mysqli_query($conn, $sqlParent); 
    while ($row = $resultParent->fetch_assoc()) { 
     echo "<div class='section'> 
      <div class='left-mark'></div> 
      <p class='text'> ".$row['preset_name']." </p> 
     </div>"; 
    } 
}