Я храню свои данные в плоском файле следующим образом:
1|$item|$price|$quality|$keywords
Который выглядит так в реальности:
1|Shoes|50|5|Classy,basic
3|Shirt|25|4|Simple
2|Tshirt|20|1|Basic, urban
4|Coat|45|3|Classy, preppy
Я пытаюсь отсортировать данные по одному из столбцов по своему выбору, скажем, по цена. Вот файл, вызываемый функцией ajax, которая перечисляет данные:
$cat_file = "data.php";
$cat_db = file("$cat_file");
$call = fopen("$cat_file","r");
foreach($cat_db as $cat_line) {
$cat_line_arr = explode("|",$cat_line);
$cat_line_id = $cat_line_arr[1];
if($cat_line_id == $cat) {
$id = $cat_line_arr[0];
$item = $cat_line_arr[1];
$price = $cat_line_arr[2];
$quality = $cat_line_arr[3];
$keywords = $cat_line_arr[4];
if (BLABLABLACONDITION) {
*LISTS THE DATA SORTED THE WAY I WANT*
}
}
}
fclose($call);
Мой код выше работает нормально, но нет особой сортировки, он просто перечисляет данные в исходном порядке из файла.
Вот результат, который я хочу получить, если сортирую по цена а также в порядке убывания например:
1|Shoes|50|5|Classy,basic
4|Coat|45|3|Classy, preppy
3|Shirt|25|4|Simple
2|Tshirt|20|1|Basic, urban
Что я должен заменить СПИСОК ДАННЫХ Сортировка ПУТЬ Я ХОЧУ с сортировкой данных? Заранее спасибо за помощь
// read file as string and turn into an array, 1 element per line
$records = explode("\n", file_get_contents('path/to/file'));
// turn each line into an array, 1 element per field
array_walk($records, function (&$record) { $record = explode('|', $record); });
//$records is now a two-dimensional array containing the data
// gather the prices into a new array
$prices = array_map(function ($record) { return (int) $record[2]; }, $records);
// use the prices to sort the records
array_multisort($prices, SORT_ASC, $records);
foreach ($records as $record) {
//... do your thing.
}
Не уверен, что я полностью понимаю ваши вопросы, поэтому просто угадайте здесь, вы ищете krsort () и ksort ()?
$cat_line_id = $cat_line_arr[0];
$cat_line_item = $cat_line_arr[1];
$cat_line_price = $cat_line_arr[2];
так далее…
ksort($cat_line_price);
переставить массив по цене в порядке возрастания
krsort($cat_line_price);
переставить массив по цене в порядке убывания