簡體   English   中英

PHP mysql while循環內的foreach循環重復

[英]Php mysql while loop inside foreach loop duplicates

我有一個像這樣的數據結構的字符串 $string = "2,3,4,5"; 我想從我的數據庫中選擇以獲取所有 ID,然后如果等於數據庫 ID,則突出顯示分解的字符串值

$string = "2,3,4,5";
$exp = explode(",",$string);

foreach($exp as $e) {
    $query = $conn->query("select * from tbl");
    while($row = $query->fetch_assoc()) {

        $result .= '<option value="" ';
        if($e === $row['id']):
            $result .= ' selected';
        endif;                                      
        $result .= '>';
        $result .= $row['id'];
        $result .= '</option>';

    }
}

但我不斷得到重復,如 1234678,12345678,12345678,12345678 請幫忙...

不確定您要做什么,但請嘗試以下代碼。 在您的代碼中,您正在 for 循環中運行數據庫查詢,這對性能造成了影響。

    $string = "2,3,4,5";
    $exp = explode(",",$string);

    $query = $conn->query("select * from tbl");
    while($row = $query->fetch_assoc()) {
     $result .= '<option value="" ';
        foreach($exp as $e){
         if($e === $row['id']){
           $result .= ' selected';
           break;
         }
        }

        $result .= '>';
        $result .= $row['id'];
        $result .= '</option>';

    }

您應該更改 foreach 和 while 的位置,例如:

$query = $conn->query("select * from tbl");
while($row = $query->fetch_assoc()) {    
    $result .= '<option value="" ';
    foreach($exp as $e) {
      if($e === $row['id']) {
        $result .= ' selected';
      }
    }                                  
    $result .= '>';
    $result .= $row['id'];
    $result .= '</option>';
}

你的邏輯是絕對正確的,但你把循環放在錯誤的地方。

因為 foreach 每次都在運行,而且每次都運行 SQL 查詢,每次都返回第一行,foreach 匹配並每次都打印相同的結果。 如此簡單,您需要將 SQL 查詢放在 foreach 之外並像下面這樣運行

$query = $conn->query("select * from tbl");
while($row = $query->fetch_assoc()) {    
  $result .= '<option value="" ';
  foreach($exp as $e) {
    if($e === $row['id']) {
      $result .= ' selected';
    }
  }                                  
 $result .= '>';
 $result .= $row['id'];
 $result .= '</option>';
}

您肯定會獲得所需的輸出。 謝謝

看起來你想標記 id user selected。我將執行以下兩個步驟:

  • 獲取所有 ID
  • 檢查每個 id 是否被選中
$query = $con->query("select id from config");
$datas = [];
$result = '';
while($row = $query->fetch_assoc()) {    
    $result .= '<option value="'.$row['id'].'" ';
    if(in_array($row['id'], $exp))
    {
        $result .= ' selected';
    }                                 
    $result .= '>';
    $result .= $row['id'];
    $result .= '</option>';
}
echo $result;

結果看起來像:

<option value="1"  selected>1</option><option value="2"  selected>2</option>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM