2013-04-15 2 views
0

У нас есть неприятный вызов базы данных с использованием функции Wordpress $ wpdb-> get_results (SQL).

После получения результата на PHP нам нужно внести несколько изменений в результат.

Так может кто-нибудь сказать мне, как я могу:

1) Удалить определенные строки из get_results() возвращенный объект.

2) Измените значения конкретных столбцов в определенных строках в возвращаемом объекте.

I.e. если возвращённый объект $ nastyData, нам нужно:

1) Удалить определенные строки из $ nastyData

2) Измените значение отдельных столбцов в определенных строках в $ nastyData, например, $ nastyData-> имя для определенной строки.

Любые идеи?

Я думал о make get_results() возвращать данные как массив, но это создаст проблемы в других местах нашего кода (где код ожидает получить объект).

Спасибо, Мадс

ответ

1

Начнем с того, ваш «Насти вызова базы данных» должны быть оптимизированы, чтобы быть менее противным. Более конкретно, запрашивайте только те результаты, которые вам нужны, чтобы вам не пришлось удалять последующие слова. Это лучшее решение.

Если вы настаиваете на попытке изменить объекты, это обходное решение. Согласно the documentation, при возвращении объектов, они будут возвращены в одном из двух способов:

ОБЪЕКТ - результат будет выводиться как численно индексированный массив объектов строк.

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

Таким образом, зная, что результат представляет собой массив объектов, мы можем добраться до каждого отдельного экземпляра, используя foreach конструкцию:

$results = $wpdb->get_results($nastySQL); 

foreach($results as $index => $result) 
{ 
    // Change name column to FirstName using copy and delete 
    $tmp = $result->name; 
    unset($result->name); 
    $result->FirstName = $tmp; 

    // Remove specific row 
    if($result->name == "Tom") 
    { 
     unset($results[$index]); 
    } 
}