Страница 1 из 1

"естесственная" сортировка массивов (PHP)

Добавлено: 09 апр 2006, 11:04
pashtet
Помогите пожалуйста. Я читаю файлы из папки в массив. Файлы имеют имена типа: file1.txt, file2.txt... file11.txt. Но в массив они заносяться так что file11.txt имеет индекс мееньше чем file2.txt. Ну думаю вы поняли о чём я. И это несмотря на то что в папке файлы стоят так как мне надо, то есть 11 после 2-го 3-го и тд. Как отсортировать массив, чтобы всё встало на свои места? Вроде есть функция natsort но она насколько я понимаю фактически не менят элементы местами. После её применения выводил третий элемент массива и им был file11.txt. Как с этим справиться??

Добавлено: 09 апр 2006, 11:48
Oscar
pashtet,

вместо

for($i = 0; $i < count($array); $i++)

используй

foreach($array as $k=>$v)

Код: Выделить всё

<?php
$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");

sort($array1);
echo "sort()
\n";
foreach($array1 as $k => $v) {
	echo "$k = $v
\n";
}
echo "<hr>\n";

natsort($array2);
echo "natsort
\n";
foreach($array2 as $k => $v) {
	echo "$k = $v
\n";
}
echo "<hr>\n";
?> 

Добавлено: 09 апр 2006, 15:50
pashtet
да у меня так наверно не получиться. Просто у меня там заморочек многа. Цикл у меня while, элементы массива мне нужны для открытия файла: $file = fopen($filename_array[$i],"r"); , и мне нужны элементы не с первого и не до последнего.. короче запутано всё, сам не пойму :) Мне вот интересно, есть ли приёмчик чтобы переставить "естесственным" порядком и что бы сохранился этот "естественный" порядок. Или уже думаю может просто имена файлам давать только цифрами, а потом отсортировать как числа да и всё...

Добавлено: 09 апр 2006, 16:19
Oscar
pashtet,

"естественный" порядок сохраняется, просто ключи не меняются.

Но если уж так, тогда вот:

Код: Выделить всё

<?php
$array1 = array("img12.png", "img10.png", "img2.png", "img1.png");

usort($array1, "strnatcmp");

for($i = 0; $i < count($array1); $i++) {
	echo $array1[$i]."
\n";
}
echo "<hr>\n";
?>
usort, strnatcmp

Добавлено: 09 апр 2006, 17:00
pashtet
О, вроде то что надо, пойду пробовать. Спасибо огромное

Добавлено: 09 апр 2006, 17:16
pashtet
ОТЛИЧНО!! Всё работает. Ещё раз приогромнейшее спасибо