PHP in_array()仅适用于嵌套if

时间:2017-04-14 07:03:55

标签: php

以下代码:

$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

1 个答案:

答案 0 :(得分: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检查天气查询返回结果