ooPHP - Как мне создать массив объектов из ассоциативного массива? - PullRequest
0 голосов
/ 12 октября 2010

Я не уверен, возможно ли это даже после попытки выяснить это часами, но здесь идет ...

У меня есть класс UserPicture, который имеет свойства для имени файла, типа файла, созданного и т. Д. (Т. Е. Он не хранит фактическое изображение в виде большого двоичного объекта, а ссылается на него с помощью $ filename. $ Filetype).

Я хочу, чтобы у меня была страница со всеми фотографиями пользователя, поэтому мне нужно извлечь все строки из БД, относящиеся к этому пользователю. Я успешно вывел ассоциативный массив из БД и использовал следующий код для создания объекта, который работает так же, как я проверил его вывод, повторив его ...

$result=query("SELECT * FROM pictures WHERE user_id=$user_id");
// Returns associative array with numerous succesfully.
$pictures = array();
foreach($result as $row) {
    $pictures = new UserPicture($row);
}

Это вроде работает, но я получаю только последнюю строку как объект в массиве. Итак, я попробовал array_push ...

foreach($result as $row) {
   array_push($pictures, new UserPicture($row));
}

... и я попытался использовать $ pictures [] = new UserPicture ($ row), но оба раза выдают мне следующую ошибку ...

Исправляемая фатальная ошибка: объект класса UserPicture не может быть преобразован в строку в user_picture_manage.php в строке 72

Если бы кто-нибудь мог пролить свет на то, что я делаю неправильно, это было бы очень полезно!

Большое спасибо, Стив

1 Ответ

4 голосов
/ 12 октября 2010

Вы перезаписываете переменную $pictures в приведенном выше коде. Вам нужно добавить новый ключ для каждой строки. Следующее должно сделать трюк:

$result=query("SELECT * FROM pictures WHERE user_id=$user_id");
// Returns associative array with numerous succesfully.
$pictures = array();
foreach($result as $row) {
    $pictures[] = new UserPicture($row);
}

Обратите внимание, где я добавил квадратные скобки ([]). Для каждой итерации в цикле foreach в массив $pictures будет добавлен новый ключ, содержащий в качестве значения новый класс UserPicture.

После этого вы сможете перебирать свой новый массив $pictures следующим образом:

foreach ($pictures as $picture) {
    $src = $picture->filename . "." . $picture->filetype;
    echo '<img src="<?php echo $src; ?>" alt="" />';
}
...