Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Регулярные выражение (https://javascript.ru/forum/server/77045-regulyarnye-vyrazhenie.html)

Sonya 18.03.2019 18:56

Регулярные выражение
 
Здравствуйте! Подскажите, пожалуйста, как решить задачу. Есть текстовый файл с содержанием:

Австралия 123
Австрия 237
Азербайджан 57
Аландские острова 5
Албания 23
Алжир 4366


Надо вывести страны с числами в порядке убывания. Делаю так:
$file = file('text.txt');
$digit=preg_replace("/[^0-9]/","",$file);
rsort($digit);
foreach($digit as $num) {
	$number=key(preg_grep('|'.$num.'|i',$file));
	echo $file[$number]."<br />";
}


Выводит:
Алжир 4366
Австрия 237 
Австралия 123 
Азербайджан 57 
Австралия 123 
Азербайджан 57

Что не так? И как сделать правильно?

laimas 18.03.2019 19:02

Получите массив вложенных массивов строка, число, затем array_multisort().

Sonya 18.03.2019 19:31

Не соображу как.

laimas 18.03.2019 19:38

$a = array_map(function($v) {
    return preg_split('/\s(?=\d)/', $v);
}, file('text.txt', FILE_SKIP_EMPTY_LINES));

$n = array_column($a, 1); //версия РНР должна быть не ниже 5.5

array_multisort($n, SORT_NUMERIC, SORT_DESC, $a);

$s = implode(array_map(function($v) {
    return implode(' ', $v);
}, $a));

echo $s;


А вообще, такое нужно держать в базе, или в файле, то готовым набором: array -> json.

Sonya 18.03.2019 19:51

Отлично! То, что надо. Большое спасибо!


Часовой пояс GMT +3, время: 14:53.