2014-12-13 1 views
1

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

class getposts 
{ 
    public function getpostcontent($userid){ 
    include('db-conx.php');//Connects to Db 
    $getval = "SELECT `content`,`date` FROM posts WHERE userid = ?"; 
    $stmt = $conn->stmt_init(); 
    if ($stmt->prepare($getval)) 
    { 
     $userid = $_SESSION['userid']; 
     $stmt->bind_param("s", $userid); 
     $stmt->execute(); 
     $stmt->bind_result($content, $date); 
     while ($stmt->fetch()) { 
      $displayname = "Tom"; 
      $array = [ 
      "content" => "$content", 
      "date" => "$date", 
      "displayname" => "$displayname", 
      ]; 
      return $array; 
     } 
    } 
} 

и вызвать его, используя в Posts.php:

$posts = new getposts(); 
echo $posts ->getpostcontent($userid); 

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

+0

С PHP 5.5 или более поздней версии вы можете [взглянуть на генераторы] (http://php.net/manual/en/language.generators.overview.php). –

ответ

1

Вы можете вставить новую запись в массив с каждой итерации - затем возвращают весь массив:

while ($stmt->fetch()) { 
     $displayname = "Tom"; 
     $array[] = array(
     "content" => "$content", 
     "date" => "$date", 
     "displayname" => "$displayname" 
     ); 

    } 
    return $array; 

В коде массив был будучи переписаны каждый раз и только возвращающегося последнюю строку из базы данных. Теперь он просто добавит к массиву внутри цикла while, а затем после его завершения вернет все.

Edit: Я обычно использую $result вытащить данные обратно из базы данных - не уверен, что, если ваш подход будет работать - но если не смотреть на это :)

Edit 2:

В коде у вас теперь есть массив массивов. Вы можете взывать каждый элемент, как это:

echo $array[0]['content']; 

Это эхо из содержимого content из первой записи, $array[1]['content'] имеет вторую строку из базы данных и так далее.

Edit 3:

Вы возвращаете массив - не объект, так что вы можете сделать это следующим образом:

$posts = new getposts(); 
// You make an object of the class. 

$returned=$posts->getpostcontent($userid); 
// Now you run the query against the userID and return the array into $returned 

foeach($returned as $val) 
{ 
    print_r($val); 
    // This is showing you the structure of each array inside the main array. 

    // Or you can access each bit as needed: 

    echo 'The date is '.$val['date'].'<br>'; 
    echo 'The content is is '.$val['content'].'<br>'; 
} 
+0

Спасибо за быстрый ответ. Я попробовал это, и я могу подтвердить, что он делает цикл сейчас. Однако при вызове я получаю ошибку «Array to string conversion». Надеюсь, это не должно быть слишком сложно исправить, и спасибо, что я буду искать в переменной $ result. Еще раз спасибо :) – user3590911

+1

@ user3590911 См. Edit 2. – Fluffeh

+0

Спасибо, как я могу получить его, чтобы закодировать значение для каждого массива из класса в файле functions.php – user3590911

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