2017-04-14 47 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