
09.12.2008, 03:49
|
|
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
С нами:
10172486
Репутация:
874
|
|
Есть двумерный массив вида
1 a d
2 b c
3 c b
4 d a
Хочу устроить сортировку как по столбцам.
Т.е. сортируем по первому нулевому столбику (столбцы пронумерованы допустим от 0 до 3) в обратном порядке, получаем
4 d a
3 c b
2 b c
1 a d
Т.е. СТРОКИ таблицы неразбились
Далее то что получилось сортируем допустим по первому столбику по порядку получим
1 a d
2 b c
3 c b
4 d a
Ну и можем сортировать так по любому столбику туда сюда.
КАК сделать такую сортировку массива на PHP?
Почитал array_multisort - не то... или неверно почитал 
|
|
|

09.12.2008, 04:31
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами:
9649706
Репутация:
3338
|
|
2 Red_Red1:
примерно так:
PHP код:
<?
/*
Есть двумерный массив вида
1 a d
2 b c
3 c b
4 d a
Хочу устроить сортировку как по столбцам.
Т.е. сортируем по первому нулевому столбику (столбцы пронумерованы допустим от 0 до 3) в обратном порядке, получаем
4 d a
3 c b
2 b c
1 a d
Т.е. СТРОКИ таблицы неразбились
Далее то что получилось сортируем допустим по первому столбику по порядку получим
1 a d
2 b c
3 c b
4 d a
Ну и можем сортировать так по любому столбику туда сюда.
КАК сделать такую сортировку массива на PHP?
*/
$str = "a d b c c b d a";
preg_match_all('/([a-z])/s', $str, $result);
$count = count($result[0]);
for ($i=0;$i<$count;$i++)
{
echo $result[0][$i].$result[0][$i+1]."\r\n";
$i++;
}
echo "\r\n";
$count1 = count($result[0])-2;
for ($i=0;$i<=$count1;$i++)
{
$result[1][$i] = $result[0][$i+1];
$result[1][$i+1] = $result[0][$i];
$i++;
}
for ($i=0;$i<$count;$i++)
{
echo $result[1][$i].$result[1][$i+1]."\r\n";
$i++;
}
echo "\r\n";
for ($i=0;$i<=$count1;$i++)
{
$result[1][$i] = $result[0][$i];
$result[1][$i+1] = $result[0][$i+1];
$i++;
}
for ($i=0;$i<$count;$i++)
{
echo $result[1][$i].$result[1][$i+1]."\r\n";
$i++;
}
Последний раз редактировалось Pashkela; 09.12.2008 в 05:06..
|
|
|

09.12.2008, 04:37
|
|
Banned
Регистрация: 08.12.2008
Сообщений: 3
С нами:
9169802
Репутация:
1
|
|
Pashkela зачем изобретать велосипед
Red_Red1 юзай array_reverse()
|
|
|

09.12.2008, 04:52
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами:
9649706
Репутация:
3338
|
|
Мне нравится изобретать велосипеды, т.к. по образованию не программер. Каждый вопрос - ребус.
Главное - результат 
Последний раз редактировалось Pashkela; 09.12.2008 в 05:12..
|
|
|

09.12.2008, 09:56
|
|
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
С нами:
10172486
Репутация:
874
|
|
2 Pashkela
Спасибо конечно за попытку.
Но дело в том что мне нужна СОРТИРОВКА МАССИВА.
Может это некая функция должна быть на вход которой подаем массив, столбик по которому сортируем, направление. На выходе отсортированый массив.
Может так будет понятнее
Имеем массив полных имен Фамилия Имя Отчество
Фамилия Имя Отчество
1 Иванов Николай Петрович
2 Сидоров Андрей Алексеевич
3 Егоров Плюс Плюсович
4 Петров Тарас Сергеевич
Нужна сортировка по столбикам, т.е. по фамилии, имени или отчеству. При это ясно что "человек должен остатся" Т.е. Если сортируем по имени то НЕ должно получится Иванов АНДРЕЙ Петрович
...
Видимо нету такой функции в ПХП... придется писать что то подобное.
Последний раз редактировалось Red_Red1; 09.12.2008 в 10:41..
|
|
|

09.12.2008, 11:22
|
|
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
С нами:
9840758
Репутация:
808
|
|
Red_Red1, usort();
Хотя это скорее задача БД.
|
|
|

09.12.2008, 12:55
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами:
9649706
Репутация:
3338
|
|
2 Red_Red1:
Да принцип тот же самый, только лучше тогда, чтобы массив, если речь идет просто о тексте в текстовом файле, был такой:
1 Иванов Николай Петрович;
2 Сидоров Андрей Алексеевич;
3 Егоров Плюс Плюсович;
4 Петров Тарас Сергеевич;
Делаем 1-ый эксплоуд через ";" а потом каждый элемент получившегося массива эксплодим через "цифра_пробел" и смотрим первую букву второго элемента нового массива. А дальше просто и алгоритм примерно такой же. Если надо - могу сделать
|
|
|

09.12.2008, 13:32
|
|
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
С нами:
10172486
Репутация:
874
|
|
Причем тут файлы?! О.о Я ведь про файлы ниче не писал. Есть уже готовый массив.
$arr[1]['Familiya'] = 'Иванов'
$arr[1]['Imya'] = 'Николай'
$arr[1]['Otchestvo'] = 'Петрович'
и т.д.
Я просто "нарисовал" его в виде таблицы, так удобнее.
|
|
|

09.12.2008, 14:56
|
|
Познающий
Регистрация: 27.07.2008
Сообщений: 98
С нами:
9362932
Репутация:
86
|
|
ИМХО только через БД, остальное костыли.
|
|
|

09.12.2008, 15:02
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
С нами:
9497186
Репутация:
1304
|
|
Red_Red1 пример каг бе из мануала. Захочется в обратном порядке сортировать - сделаете вместо одной функции - класс. Пример так же тут: http://ru2.php.net/manual/ru/function.usort.php
PHP код:
function cmp($a, $b)
{
return strcmp($a["Familiya"], $b["Familiya"]);
}
$arr[1]['Familiya'] = 'Петров';
$arr[1]['Imya'] = 'Николай';
$arr[1]['Otchestvo'] = 'Петрович';
$arr[2]['Familiya'] = 'Иванов';
$arr[2]['Imya'] = 'Сергей';
$arr[2]['Otchestvo'] = 'Павлович';
$arr[3]['Familiya'] = 'Сидоров';
$arr[3]['Imya'] = 'Максим';
$arr[3]['Otchestvo'] = 'Викторович';
usort($arr, "cmp");
foreach($arr as $key => $value)
{
echo "\$arr[$key]: " . $value['Familiya'].":".$value['Imya'].":".$value['Otchestvo']. "
";
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|