2017-09-30 45 views
0

我希望下面的代碼能夠將來自查詢的SQL信息與數組進行比較,以便即使在SQL中出現兩次時也不會回顯同一個事件兩次。使用SQL進行數組比較

問題是,有一件事情得到回聲兩次。我用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>"; 
    } 
}