Я проверил сайт и есть тонны ответов, относящихся к этому вопросу. Но я изучаю PHP. Поэтому мне очень трудно понять. В любом случае,
$data = array(); $data['count'] = $result->num_rows; ... ... $data['content'][] = array( "userid" => $userid, "title" => $title, "slug" => $slug, "download" => $download, "usrtitle" => $usrtitle, "company" => $company, "period" => $period, "email" => $email, "mobile" => $mobile, "fname" => $fname, "lname" => $lname, "address" => $address, "pic" => $pic, "appliedon" => date("dMY", strtotime($appliedon)), "price" => $price ); echo json_encode($data);exit;
Я использую ajax для извлечения данных из базы данных. Все работает нормально, но я хочу сортировать данные по цене. Я не могу его жестко закодировать, потому что я хочу, чтобы пользователь выбирал то же самое. Есть вложенные запросы mysql, и невозможно сортировать данные из запроса mysql. Потому что данные поступают из нескольких запросов.
Пожалуйста, сообщите, как я могу сортировать данные.
Я нашел этот вопрос на SO Как сортировать многомерный массив в PHP Я не уверен, что это будет работать в моем случае или нет.
благодаря
Изменить: структура таблицы базы данных.
userid, title, slug,email,mobile,fname,lname,address,pic
поступает из таблицы пользователей. download, usrtitle, company,price
из таблицы профилей. appliedon
из таблицы применения.
Первый запрос выполняется на прикладной таблице, откуда я получаю идентификатор пользователя. этот userid используется в файлах пользователей и профилей для получения сведений. Я не уверен, что могу использовать orderby для сортировки данных здесь.
PHP встроенная функция array_multisort
работает для этого случая.
1. Получите массив цен, исходящих из $data['content']
$sort_arr = array(); foreach($data['content'] as $item) { $sort_arr[] = $item['price']; }
array_multisort
для сортировки $data['content']
по цене в порядке спуска:
//if you want ascending order replace `SORT_DESC` by `SORT_ASC` array_multisort($sort_arr, SORT_NUMERIC, SORT_DESC, $data['content'])
Более подробно использование array_multisort
, см. Официальную документацию: http://php.net/manual/en/function.array-multisort.php
Вы можете использовать usort
и определить собственную функцию сортировки:
$data = [ ["name" => "A", "price" => 54], ["name" => "B", "price" => 102], ["name" => "C", "price" => 4], ["name" => "D", "price" => 76], ]; echo("UNSORTED <br>\n"); print_r($data); usort($data, function($a, $b) { return $a["price"] - $b["price"]; }); echo("\n<br>\n<br>SORTED <br>\n"); print_r($data);
Если вы хотите заказать по именам (или другой строке), вы можете, например, использовать strnatcmp
.
usort($data, function($a, $b) { return strnatcmp($a["name"], $b["name"]); });