2013-10-08 2 views
2

Можно ли получить результаты из массива из запроса базы данных и отсортировать по одному из столбцов в результатах? Если да, то как это сделать?Сортировка массива из запроса db по одному столбцу массива

Ниже приведен пример массива, что у меня есть:

Array ([0] => StdClass Объект ([пункт] => 0 [размер] => 2056515 [группа] => SF2K [далее] => 205/65R15 SAFFIRO SF2000 94V 40K [sort4] => 94 [sort5] => V [sort6] => [цена] => 69.14) [1] => stdClass Object ([item] => 8518 [size] => 2056515 [группа] => FTOUR [описание] => 205/65R15 FUZION TOUR BW 94H 40K [sort4] => 94 [sort5] => H [sort6] => [price] => 77.63) [2] = > stdClass Object ([item] => 106633 [size] => 2056515 [group] => SEREN [description] => 205/65R15 BS TURANZA SER + 94H 80K [sort4] => 94 [sort5] => H [sort6] => [цена] => 124.07))

Я хотел бы отсортировать его по [цене ]. Я знаю, что в этом примере все они уже в численном порядке, но они не всегда.

+0

Если вы действительно хотите сделать это на PHP, вы можете использовать описанный здесь подход: http://stackoverflow.com/a/19253751/1615903 - однако, выражение 'ORDER BY' в вашем SQL-запросе будет намного лучше , – 1615903

+0

У меня есть база данных, заказанная по цене, и у меня есть ORDER BY в моем SQL-запросе, проблема - это еще одна функция, которую я не могу удалить из шаблона, изменяющего ORDER BY после моего запроса. Это не постоянное решение, просто временное исправление, поэтому у меня есть время для реального решения. Я ценю вашу помощь. – Willee5586

ответ

1

Реальное решение - исправить ваш код, чтобы вы могли использовать оператор order by в своем запросе.

Тем не менее, сделать это в PHP, создать функцию компаратора:

function myComparator($a, $b) { 
    return $a->price - $b->price; 
} 

Затем в массиве, давайте назовем его $myArray, звоните:

usort($myArray, 'myComparator'); 

См php.net documentation on usort для более подробной информации ,

+0

Я ценю вашу помощь, хотя я делаю это неправильно. Спасибо! – Willee5586

0

Вы можете сделать это с помощью самого SQL-запроса. Добавьте одно из следующих действий к концу вашего запроса:

возрастающем порядке (по убывающей):

ORDER BY price ASC 

По убыванию (по убывающей):

ORDER BY price DESC 
+0

$ tire_sql = $ wpdb-> prepare ("SELECT item, size,' group', description, sort4, sort5, sort6, price FROM _tires WHERE size =% d AND sort5! = '' ORDER BY price ASC ", $ size); Это то, что у меня есть, моя проблема заключается в том, что этот шаблон страницы сильно включен в тему веб-сайта. Существует функция, которая сама вызывает заказ после моего запроса. Поэтому мне нужно прибегнуть. Я знаю, что это ужасная вещь, но я просто в хрусте, чтобы заставить ее работать, тогда у меня будет время переписать ее после. – Willee5586

+0

Если это ваши ограничения, то вы должны сделать то, что вам нужно сделать;) – SamT

0

Вы можете просто добавить «ЗАКАЗАТЬ BY цена DESC (или ASC, в зависимости от ваших потребностей) "в ваш запрос на SQL

+0

После моего запроса sql и перед отображением результатов есть функция, которая является частью шаблона WordPress, которую я не могу изменить или удалить, что меняет порядок после моего запроса. Поэтому я надеялся, что существует способ сортировки массива одним из столбцов из db, который я могу добавить после изменения функции шаблона. – Willee5586

+0

Я вижу ...вы можете попробовать это: Функция cmp ($ a, $ b) { return $ a ["price"] - $ b ["price"]; } usort ($ arr, "cmp"); –

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