ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

09.12.2008, 03:49
|
|
Участник форума
Регистрация: 12.01.2007
Сообщений: 262
Провел на форуме: 4608122
Репутация:
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
Провел на форуме: 9220514
Репутация:
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
Провел на форуме: 21188
Репутация:
1
|
|
Pashkela зачем изобретать велосипед
Red_Red1 юзай array_reverse()
|
|
|

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

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

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

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

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

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

09.12.2008, 15:02
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
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']. "
";
|
|
|
|
 |
|
|
Здесь присутствуют: 6 (пользователей: 0 , гостей: 6)
|
|
|
|