Сортировать данные json или многомерные массивы в php
Я проверил сайт и есть тонны ответов, относящихся к этому вопросу. Но я изучаю 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("d-M-Y", strtotime($appliedon)),
"price" => $price
);
echo json_encode($data);exit;
Я использую ajax для извлечения данных из базы данных. Все работает нормально, но я хочу сортировать данные по цене. Я не могу его жестко закодировать, потому что я хочу, чтобы пользователь выбирал то же самое.
Есть вложенные запросы mysql, и невозможно сортировать данные из запроса mysql. Поскольку данные поступают из нескольких запросов.
Пожалуйста, сообщите, как я могу сортировать данные.
Я нашел этот вопрос на SO Как сортировать многомерный массив в PHP
Я не уверен, что это будет работать в моем случае или нет.
Спасибо
Edit:
структура таблицы базы данных.
userid, title, slug,email,mobile,fname,lname,address,pic
поступает из таблицы пользователей. download, usrtitle, company,price
из таблицы профилей. appliedon
.
Сначала запускается запрос на прикладной таблице, я получаю идентификатор пользователя. этот userid используется в файлах пользователей и профилей для получения сведений. Я не уверен, что могу использовать orderby для сортировки данных здесь.
Ответы
Ответ 1
PHP встроенная функция array_multisort
работает для этого случая.
1. Получите массив цен от $data['content']
$sort_arr = array();
foreach($data['content'] as $item) {
$sort_arr[] = $item['price'];
}
2.Используйте 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
Ответ 2
Вы можете использовать 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"]);
});