сортировать JSON или многомерный массив данных в PHP

1

Я проверил сайт и есть тонны ответов, относящихся к этому вопросу. Но я изучаю 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 для сортировки данных здесь.

  • 4
    сортировать данные в самом MySQL запросе
  • 0
    Пожалуйста, покажите ваш запрос. Это даст вам отсортированные данные.
Показать ещё 4 комментария
Теги:
arrays

2 ответа

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

  • 0
    Спасибо за Ваш ответ. Проголосовал.
  • 0
    @CalculationMachine Это сработало?
Показать ещё 1 комментарий
1

Вы можете использовать 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"]);
});
  • 0
    Спасибо за Ваш ответ. Проголосовал за.
  • 0
    Это то, что вы искали?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню