2017-04-14 46 views
1

下面的代碼:PHP in_array()只能在嵌套如果

$result = $conn->query("SELECT * FROM $myTable"); 
while($result && ($row = $result->fetch_assoc()) && in_array($row['id'], $accessible_ids)){ 
    // do something 
} 

不會做的事,而這個小修改:

$result = $conn->query("SELECT * FROM $myTable"); 
while($result && ($row = $result->fetch_assoc())){ 
    if(in_array($row['id'], $accessible_ids)){ 
    //do something 
    } 
} 

請問什麼。 $accessible_ids來自這裏:

$result = $conn->query("SELECT id FROM $someTable WHERE userID = $userID"); 
$accessible_ids = array(); 
while($result && ($row= $result->fetch_assoc())){ 
    $accessible_ids[] = $row['id']; 
} 

但是:如果$accessible_ids包含元素 '1' 而已,這兩個代碼工作。但一旦$accessible_ids包含「2」和「3」,只有較低的代碼適用於我。

我只想知道爲什麼這是一件事,我做了什麼值得擁有。 (查找原因,我花了一段時間,我在使用PHP 7和XAMPP)

更新:

輸出示例:

print_r($accessible_ids); 
$result = $conn->query("SELECT * FROM $myTable"); 
while($result && ($row = $result->fetch_assoc())){ 
    if(in_array($row['id'], $accessible_ids)){ 
    //do something 
    echo '<br>'; 
    print_r($row['id']); 
    } 
} 

產地:

Array ([0] => 2 [1] => 3) 
2 
3 
+0

你能分享的'的print_r($ accessible_ids)'和'的print_r($行[ '身份證'])'樣? –

回答

0

只需implode()$accessible_ids並傳入查詢。它會給你想要的結果without使用in_array();

$ids = implode(', ', $accessible_ids); 
$result = $conn->query("SELECT * FROM $myTable WHERE id IN($ids)"); 
$row_cnt = $result->num_rows; 
if($row_cnt > 0) 
{ 
    while ($row = $result->fetch_assoc()) { 
    // do something 
    } 
} 

使用num_rows查詢天氣查詢返回的結果還是不

+0

你檢查了上面的答案嗎? – Saty