我试图在PHP中创建一个while循环,它从数据库中检索数据并将其放入数组中。这个while循环应该只工作到其填充的数组包含某个值为止。
有没有一种方法可以在循环仍然繁忙的时候扫描数组并查找值?
说白了;
$array = array();
$sql = mysql_query("SELECT * FROM table");
while($row = mysql_fetch_array($sql)){
//Do stuff
//add it to the array
while($array !=) //<-- I need to check the array here
}
您可以使用in_array
函数和break
语句来检查值是否在数组中,然后停止循环。
首先,我认为检查用填充数组的内容会更容易,而不是检查数组本身。随着填充数组的增长,搜索它将花费越来越长的时间。已安装,考虑:
$array = array_merge($array, $row);
if (in_array('ThisisWhatIneed', $row)
{
break;//leaves the while-loop
}
然而,如果您的查询返回了更多的数据,请考虑将其更改为返回所需的,只处理需要处理的数据,否则,您可能会得到如下代码:
$stmt = $db->query('SELECT * FROM tbl');
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
if ($row['dataField'] === 'username')
{
$user = $row;
break;
}
}
WHERE
在这里能帮上很大的忙,你不觉得吗?以及利用MySQL特定的SELECT
语法,如SELECT fields, you, need FROM table
,这更高效
您可能还注意到,上面的代码使用PDO,而不是mysql_*
。为什么?仅仅因为mysql_*
扩展已被强烈反对,不应再使用
阅读每个mysql*页面上的红色警告框告诉您的内容。它们不仅仅是为了增加色彩,让事物变得活跃起来。他们是真正的骗子。
为什么不在将每个值插入数组时检查它?它比每次检查时在整个数组上迭代要高效得多。
$array = array();
$stopValue = ...
$sql = mysql_query("SELECT * FROM table");
while($row = mysql_fetch_assoc($sql)){
array_push($array,$row['column']);
if($row['column'] == $stopValue){
// The array now contains the stop value
break;
}