2015-06-04 2 views
2

Привет У меня есть файл класса, который содержит функцию для извлечения пользователей из базы данных mySQL. Код выглядит следующим образом:PHP, итерация через массив, возвращаемый функцией

class userdbase 
{ 
    public function fetchUsers() 
    { 
     $db = new mysqli('localhost', 'user', 'pass', 'dbase'); 

     if($db->connect_errno > 0) 
     { 
      die('Unable to connect to database [' . $db->connect_error . ']'); 
     } 

     $sql = "SELECT username from `users`"; 

     if(!$result = $db->query($sql)) 
     { 
      die('There was an error running the query [' . $db->error . ']'); 
     } 

     while($row = $result->fetch_assoc()) 
     { 
      $users[] = $row['username']; 
     } 
     $result->free(); 
     $db->close(); 
     return array($users); 
    } 
} 

выше код возвращает массив в следующем используя print_r ($ dbase-> fetchUsers()):

Array 
(
[0] => Array 
    (
     [0] => user1 
     [1] => user2 
     [2] => user3 

     ) 

) 

У меня возникли проблемы зацикливания через массив из основной файл, где я ссылаюсь на функцию в классе. Код, я использую выглядит следующим образом:

<?php 

require("dbase.php"); 

$dbase = new userdbase(); 

foreach($dbase->fetchUsers() as $result) //this doesn't work 
{ 
    print "$result"; 
} 
?> 

Может кто-то более сведущий в PHP указать мне правильный способ сделать это? Спасибо заранее!

+1

Сообщение структуры массива в '$ dbase' –

+4

' возвращения массива ($ пользователей); 'возвращение это с другим гнездованием является излишним. 'return $ users;' должно быть достаточно – Ghost

+0

Спасибо, Ghost, я упустил это и решил проблему. – datether

ответ

1

При создании массива пользователей [] здесь:

while($row = $result->fetch_assoc()) 
{ 
    $users[] = $row['username']; 
} 

$ пользователей является массивом, но когда вы возвращаете его, окружив его в массив() означает, что вы возвращаете массив массивов, который не то, что вы потом обрабатываете.

Решение просто возвращает $ пользователей.

+0

благодарит за ваш вклад – datether

1

Вместо

return array($users); 

возвращают только

return $users; 

и просто применить ваш foreach цикл

+0

благодарит за ваш вклад – datether

+0

Рад помочь ..! –

Смежные вопросы