2014-01-02 3 views
1

У меня возник вопрос о том, как использовать * array_shift * с помощью fetchAll в цикле while в этом примере? Предполагаемый результат - это просто получить данные из db и использовать его для заполнения приложения CRUD.Использование array_shift в цикле while с fetchAll() в SELECT * из mysql

Насколько я понимаю * 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; 
+0

Что вы пытаетесь сделать точно? –

+0

Просто выполните результаты и результат. – webdev

+0

Так почему бы не просто '$ contacts = $ sql-> fetchAll (PDO :: FETCH_ASSOC)'? Это будет эквивалентно тому, что вы делаете. –

ответ

0

array_shift удалит первый элемент из массива и вернет его. Так что если у вас есть массив как

array("one", "two", "three") 

array_shift Использование возвратит "one" и исходный массив будет обновлен до array("two", "three"). Когда это делается в цикле, это означает, что в конечном итоге исходный массив будет сокращен до array().

According to the documentation, array_shift на пустом массиве возвращает NULL. Вы можете думать о коде, как работает:

if ($obj = NULL) 

Это falsy, поэтому утверждение (while в вашем случае) не вычисляется.

+0

Улыбнитесь по глубине, теперь больше смысла в том, как array_shift работает в этом примере. Цените, что вы нашли время, чтобы объяснить это. – webdev