Как получить каждую строку в виде ассоциативного массива используя $wpdb?

26 нояб. 2012 г., 21:25:43
Просмотры: 70K
Голосов: 14

Я пытаюсь переписать этот код для использования $wpdb.

$data = array();

$query = "SELECT * FROM videos";
$query_exec = mysql_query($query) or die();

while($row = mysql_fetch_array($query_exec)) {
    if ( $row['video'] == "http://youtu.be/".end(explode('http://youtu.be/',$row['video'])) ) {
            $data[$row['id']] = end(explode('http://youtu.be/', $row['video']));
        } else {
            $data[$row['id']] = end(explode('?v=', $row['video']));
        }   
    }

Я сделал так:

$query = $wpdb->get_results("SELECT * FROM videos");

Но как мне получить массив? Заранее спасибо за помощь.

0
Все ответы на вопрос 1
3
32

Метод get_results класса wpdb принимает необязательный второй аргумент, который позволяет указать формат возвращаемых данных. По умолчанию возвращается объект. Но вы также можете установить его в...

OBJECT — результат будет выведен в виде числового индексированного массива объектов строк.

OBJECT_K — результат будет выведен в виде ассоциативного массива объектов строк, использующего значения первого столбца в качестве ключей (дубликаты будут отброшены).

ARRAY_A — результат будет выведен в виде числового индексированного массива ассоциативных массивов, использующего имена столбцов в качестве ключей.

ARRAY_N — результат будет выведен в виде числового индексированного массива числовых индексированных массивов.

(из кодекса)

Скорее всего, вам нужен ARRAY_A.

<?php
$query = $wpdb->get_results("SELECT * FROM videos", ARRAY_A);

К сожалению, wpdb не позволяет "поточную" обработку результатов, как вы делаете, поэтому вам придётся использовать цикл foreach.

<?php
foreach($query as $row)
{
    // здесь можно работать с $row.
}
26 нояб. 2012 г. 21:35:40
Комментарии

Ок, спасибо. Но что насчёт этой строки? while($row = mysql_fetch_array($query_exec)) {

Mark Mark
26 нояб. 2012 г. 21:43:04

Смотри мою правку, тебе просто нужно использовать цикл foreach вместо while.

chrisguitarguy chrisguitarguy
26 нояб. 2012 г. 21:45:28

Чёрт, я пропустил ARRAY_A в первый раз, поэтому получил ошибку в foreach. Огромное спасибо.

Mark Mark
26 нояб. 2012 г. 21:49:57