Сортировать данные из плоского файла по столбцу

Я храню свои данные в плоском файле следующим образом:

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

Что я должен заменить СПИСОК ДАННЫХ Сортировка ПУТЬ Я ХОЧУ с сортировкой данных? Заранее спасибо за помощь

1

Решение

// 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.
}
1

Другие решения

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

переставить массив по цене в порядке убывания

0

По вопросам рекламы [email protected]