Arrays 使用array_shift on while循环,并在mysql的SELECT*上使用fetchAll()
我有一个问题,就是在本例中,如何在while循环中使用*array_shift*和fetchAll?预期的结果只是从数据库中获取数据,并将其用于填写CRUD应用程序 我理解*array_shift*会删除数组的第一个结果,但不确定为什么这不会影响本例中返回的结果。我只是想把我的脑袋绕在这个过程上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
$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的工作原理就更有意义了。感谢您花时间解释。