[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка 2 мерного массива по выбран. элемент
Игорь_Vasinsky
Вот какая задача:

есть файл base.txt

250:||:2500:||:vesh2:||:1:||:CP-250:||:
250:||:2500:||:vesh2:||:1:||:LK-250:||:
250:||:2500:||:vesh2:||:1:||:JH-250:||:
250:||:2500:||:vesh2:||:1:||:AB-250:||:
250:||:2500:||:vesh2:||:1:||:XC-250:||:

Делаю:

//Загоняю в массив
$file = "base.txt";
//Подсчёт строк
$count_str = count($file);
//Вывожу все строки
for($i = 0; $i<=$count_str; $i++){
echo $file[$i]."<br/>";
}

Получаю вывод:
250:||:2500:||:vesh2:||:1:||:CP-250:||:
250:||:2500:||:vesh2:||:1:||:LK-250:||:
250:||:2500:||:vesh2:||:1:||:JH-250:||:
250:||:2500:||:vesh2:||:1:||:AB-250:||:
250:||:2500:||:vesh2:||:1:||:XC-250:||:

А необходимость - при выводе отсортировать строки по $file[$i][4] (т.е. по CP-250, LK-250)

В алфавитном порядке.



Спустя 22 минуты, 5 секунд (30.01.2011 - 22:18) Игорь_Vasinsky написал(а):
Ау..аушиньки

Спустя 14 минут, 57 секунд (30.01.2011 - 22:33) twin написал(а):
ну попробуй так

Спустя 15 минут, 44 секунды (30.01.2011 - 22:49) Игорь_Vasinsky написал(а):
честно говоря - !!!нихрена я не понял, но попробовал так и обломался:

//Загоняю в массив
$file = "base.txt";
//Подсчёт строк
$count_str = count($file);

function compare($x, $y)
{
if ([4] ==[4] )
return 0;
else if ( $x[4] <[4] )
return -1;
else
return
1;
}

usort($file, compare);
//Вывожу все строки
for($i = 0; $i<=$count_str; $i++){
echo $file[$i]."<br/>";
}


Может какие то ключи есть, хотя в мануале не описано, как то я мутно сравниваю эоементы массивов, котоые являются строками а не числами

$x[4] <[4] 


Ни чё не понимаю

Спустя 19 минут, 21 секунда (30.01.2011 - 23:08) Игорь_Vasinsky написал(а):
Можно по меньше вариант использовать:

файл со строками:

121 :: qeqw
34::dfgd
645::nvcj
34::aal



Спустя 21 минута, 6 секунд (30.01.2011 - 23:29) Игорь_Vasinsky написал(а):
Ну так как.

Спустя 2 минуты, 16 секунд (30.01.2011 - 23:32) Winston написал(а):
Пока вот что вышло
$file = file("base.txt");
$str = count($file);
$arr = Array();
for($i = 0; $i < $str; $i++)
{
echo $arr[] = substr($file[$i], 29, 6) . '<br/>';
}
sort($arr);

for($j = 0; $j < $str; $j++)
{
echo $file[$j].' --> '.$arr[$j];
}

Завтра ещё могу помочь, а сейчас уже нужно срочно отключатся.

Спустя 14 минут, 13 секунд (30.01.2011 - 23:46) Игорь_Vasinsky написал(а):
что то странное выдал твой пример.

Спустя 1 час, 43 минуты, 6 секунд (31.01.2011 - 01:29) Игорь_Vasinsky написал(а):
Вопрос решён. Спасибо за участие.

1. Создать новый двумерный массив:

for($i=0; $i<=$total; $i++){
$data = explode(":||:", $file[$i]);
//$data = array_reverse($data);

$sorted[$i] = array(
$data[0],
$data[1],
$data[2],
$data[3],
$data[4]
);

}


2. примеить usort с пользовательской функцией.

function compare($x, $y)
{
if ($x[4] == $y[4]){
return 0;
}
else if ($x[4] < $y [4])
return -1;
else
return
1;
}
usort($sorted, 'compare');

Спустя 37 минут, 59 секунд (31.01.2011 - 02:07) Игорь_Vasinsky написал(а):
Twin как всегда вывел н нужный путь, не знаю специально иили нет

Фраза была: У тебя нет массива- есть файл. Вот это и навело.


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.