2013-07-15 2 views
1

У меня есть текстовый файл, который я бы хотел отсортировать через PHP, и я немного зациклен, так как sort() или asort() сортируют первую букву (ы) в строке, а не конкретную частьСортировка текстового файла с разделителями Php

Я читал все тексты к строке массива с помощью

$list = array(file($filename, FILE_IGNORE_NEW_LINES)); 

но как бы реализовать свой род()?

Так что мой текстовый файл содержит

Name1→Text1→1→1→1062166→3499999999 
    Name2→Text2→1→1→1332130→1999999999 
    Name3→Text3→1→1→1040121→8249999999 
    Name4→Text4→1→1→1060075→7249999999 
    Name5→Text5→1→1→1402172→249999999 
    Name6→Text6→1→1→1222044→199999999 
    Name7→Text7→1→1→1542015→299999999 

Я хотел бы выход быть отделен от последнего номера, так что выход должен быть

Name6→Text6→1→1→1222044→199999999 
    Name5→Text5→1→1→1402172→249999999 
    Name7→Text7→1→1→1542015→299999999 
    Name2→Text2→1→1→1332130→1999999999 
    Name1→Text1→1→1→1062166→3499999999 
    Name4→Text4→1→1→1060075→7249999999 
    Name3→Text3→1→1→1040121→8249999999 
+0

Существует 'usort()'. У вас может быть своя собственная функция сравнения, которая делает трюк. – Sven

+0

'fgetcsv', создать массив,' usort' array, 'fputcsv' в _new_ файл (вы не можете отсортировать существующий файл ...), при успехе (обязательно!), Отменить старый файл, переместить новый файл в старый файл. – Wrikken

ответ

1

вы можете цикл и построить массив с ключом и сортировать этот массив и вернуть свои значения. в приведенном ниже примере кода я использовал как буквальное значение, но если вы имели в виду табулятор, замените на \t. Вы можете также использовать explode

$list = file($filename, FILE_IGNORE_NEW_LINES); 

$new = array(); 
foreach ($list as $item) { 
    preg_match("/^(.*)(→[^→]+)$/", $item, $matches); 
    $new[$matches[1]] = $item; 
} 

ksort($new); 

$list = array_values($new); 
+0

Я думаю, что OP означало, что \ t ... → было только обозначение, выбранное, чтобы показать это ... но я мог ошибаться. – Orangepill

+0

@Orangepill oh okie – DevZer0

0

Попробуйте что-то вроде этого (я предполагаю, что на вы имеете в виду {вкладка})

$fp = fopen ($filename, "r"); 
$contents = array(); 
while($contents[] = fgetcsv($fp, 0, "\t"){} 
fclose($fp); 
usort($contents, function($a, $b) {return strnatcmp($a[5],$b[5]); }); 

Примечание Этот синтаксис требует PHP 5.3+

ПРИМЕЧАНИЕ

Изменено для возврата strnatcmp, чтобы номера не переполнялись.

Смежные вопросы