While循环从数据库中收集数据,直到数组包含某个值


While loop to gather data from database until array contains a certain value

我试图在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;
}