Arrays 使用array_shift on while循环,并在mysql的SELECT*上使用fetchAll()

Arrays 使用array_shift on while循环,并在mysql的SELECT*上使用fetchAll(),arrays,while-loop,fetchall,Arrays,While Loop,Fetchall,我有一个问题,就是在本例中,如何在while循环中使用*array_shift*和fetchAll?预期的结果只是从数据库中获取数据,并将其用于填写CRUD应用程序 我理解*array_shift*会删除数组的第一个结果,但不确定为什么这不会影响本例中返回的结果。我只是想把我的脑袋绕在这个过程上 $pdo = Database::connect(); $sql = $pdo->prepare("SELECT * FROM contacts ORDER BY name ASC"); $sql

我有一个问题,就是在本例中,如何在while循环中使用*array_shift*和fetchAll?预期的结果只是从数据库中获取数据,并将其用于填写CRUD应用程序

我理解*array_shift*会删除数组的第一个结果,但不确定为什么这不会影响本例中返回的结果。我只是想把我的脑袋绕在这个过程上

$pdo = Database::connect();
$sql = $pdo->prepare("SELECT * FROM contacts ORDER BY name ASC");
$sql->execute();
$result = $sql->fetchAll(PDO::FETCH_ASSOC);

$contacts = array();
while ($obj = array_shift($result)) {
    $contacts[] = $obj;
}
return $contacts;

array\u shift
将从数组中删除第一个元素并返回它。如果你有一个数组,比如

array("one", "two", "three")
使用
array\u shift
将返回
“一”
,源数组将更新为
数组(“二”、“三”)
。在循环中完成时,这意味着最终源数组将被修剪为
array()

,空数组上的
array\u shift
返回
NULL
。您可以将代码视为正在运行:

if ($obj = NULL)

这是错误的,因此该语句(
,而在您的例子中是
)不会被计算。

您到底想做什么?只需循环遍历结果和输出。那么为什么不只
$contacts=$sql->fetchAll(PDO::FETCH\u ASSOC)
?这将等同于您正在做的事情。对,这是一个备选方案,但我的问题是在本例中数组移位如何工作。它从
$result
中删除第一个元素,并将其设置为
$obj
。这是在循环中完成的。当
$result
为空时,
array\u shift
将返回一个错误值,并在深度上打破循环。现在,在本例中,关于array\u shift的工作原理就更有意义了。感谢您花时间解释。