kristofkadavr
@kristofkadavr

Как провести сортировку содержимого файла по последним символам на PHP?

Приветствую.
Есть поле для ввода, в него вносится некий текст, текст каждый раз имеет разную длину. Примерное содержимое текста:
2312312321312312 asadas-dasdasdads.ru MIT-1.3.2/14-29
23123123 asadewrewras-deewrewrasdasdads.ru MIT-1.4.1/13-29
2312312321312312 asadas-dasdasdads.ru MIT-1.3.2/2-29
232222 aFEWFWewsadas-dasdasdads.ru MIT-1.3.4/12-30
99999 aFEWFWewrrwerweadas-dasdasdads.ru MIT-1.4.1/4-6 #1

и так далее. При нажатии кнопки submit все это улетает в файл на сервере. Далее есть кнопка для чтения и отображения содержимого файла. Отображать содержимое файла следует двумя способами. Первый - как есть, второй - упорядоченный (отсортированный).
Строки, как видим, разной длины. У них только одно общее-конец, а точнее, часть конца - "MIT-1.4.1/". Данная часть присутствует во всех строках без исключения, только цифры разные каждый раз.
Если использовать функцию array_multisort, как я пробовал изначально, то строки сортируются по началу строк, что меня не устраивает. Вопрос - как можно в моем случае организовать даную сортировку по вот этой части "MIT-1.4.1/"?

На всякий случай мой код отображения и сортировки:
$file = ("upgrade.txt");
$open = fopen($file, "r");
$contents = fread($open, filesize($file));
    fclose($open);
    echo ("Несотрированный список: "."<br>");
    echo nl2br( htmlspecialchars($contents) ); 
    echo ("<hr>"."Сортированный список: "."<br>");
     // для сортировки
      $help =  file("upgrade.txt");
      array_multisort($help); 
      foreach($help as $row)
        echo ($row . '<input type="checkbox">' .'<br>');
        echo ("<hr>");
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 2
gaparchi
@gaparchi
Используй usort, а в анонимной функции регуляркой выбери значение по которому нужно отсортировать.
Ответ написан
@krypt3r
Для array_multisort() попробуйте вот такой код
<?php
$str = '2312312321312312 asadas-dasdasdads.ru MIT-1.3.2/14-29
23123123 asadewrewras-deewrewrasdasdads.ru MIT-1.4.1/13-29
2312312321312312 asadas-dasdasdads.ru MIT-1.3.2/2-29
232222 aFEWFWewsadas-dasdasdads.ru MIT-1.3.4/12-30
99999 aFEWFWewrrwerweadas-dasdasdads.ru MIT-1.4.1/4-6 #1
299311 rewrwerwerx.net MIT-1.2.2/8-46
900301834 werwerwerw.net MIT-1.3.3/20-13';
$arr = preg_split('/\r?\n/', $str);
$sort_data = [];
foreach ($arr as $i => $line) {
    $pos = strpos($line, 'MIT');
    if ($pos !== false) {
        $tmp = substr($line, $pos);
        $sort_data[$i] = $tmp;
    }
}
array_multisort($sort_data, SORT_ASC, SORT_REGULAR, $arr);
var_dump($arr);

Вывод:
array(7) {
  [0]=>
  string(37) "299311 rewrwerwerx.net MIT-1.2.2/8-46"
  [1]=>
  string(53) "2312312321312312 asadas-dasdasdads.ru MIT-1.3.2/14-29"
  [2]=>
  string(52) "2312312321312312 asadas-dasdasdads.ru MIT-1.3.2/2-29"
  [3]=>
  string(40) "900301834 werwerwerw.net MIT-1.3.3/20-13"
  [4]=>
  string(50) "232222 aFEWFWewsadas-dasdasdads.ru MIT-1.3.4/12-30"
  [5]=>
  string(58) "23123123 asadewrewras-deewrewrasdasdads.ru MIT-1.4.1/13-29"
  [6]=>
  string(56) "99999 aFEWFWewrrwerweadas-dasdasdads.ru MIT-1.4.1/4-6 #1"
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы