Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Как отсортировать массив?? |
Что касается web-а... WebMaster-а Воронежа - объединяйтесь! |
|
Опции темы |
27.02.2012, 19:27 | #1 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
Как отсортировать массив??
Array
( [0] => Array ( [price] => 22550407 [cat] => Строительство и архитектура [data] => 2012-1 [cat_id] => 25 ) [1] => Array ( [price] => 4291000 [cat] => IT, Интернет [data] => 2012-1 [cat_id] => 2 ) [2] => Array ( [price] => 3918000 [cat] => Авиация [data] => 2012-1 [cat_id] => 3 ) [3] => Array ( [price] => 4291000 [cat] => IT, Интернет [data] => 2012-2 [cat_id] => 2 ) ) Нужно получить на выходе следующее: Array ( [2012-1]=>Array( [0] => Array ( [price] => 22550407 [cat] => Строительство и архитектура [cat_id] => 25 ) [1] => Array ( [price] => 4291000 [cat] => IT, Интернет [cat_id] => 2 ) [2] => Array ( [price] => 3918000 [cat] => Авиация [cat_id] => 3 ) ) [2012-2]=>Array( [0] => Array ( [price] => 4291000 [cat] => IT, Интернет [cat_id] => 2 ) ) ) Короче выбрать с одинаковыми датами, отсортировать по ним, а остальные элементыоставить как есть, просто по порядку. |
27.02.2012, 19:31 | #2 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
Вот был пример:
$people = array( array('name' => '1', 'age' => 10, 'height' => 185), array('name' => '2', 'age' => 12, 'height' => 185), array('name' => '3', 'age' => 10, 'height' => 190), array('name' => '4', 'age' => 14, 'height' => 185), array('name' => '5', 'age' => 10, 'height' => 185), array('name' => '6', 'age' => 10, 'height' => 185), array('name' => '7', 'age' => 12, 'height' => 185), array('name' => '8', 'age' => 10, 'height' => 190), array('name' => '9', 'age' => 14, 'height' => 185), ); $names_grouped_by_age_height = array(); foreach ($people as $person) { $names_grouped_by_age_height[$person['age']][$person['height']][] = $person['name']; } а если в конечном массиве не один тока = $person['name'], а несколько надо, как в теме я написал (price, cat и cat_id)? Но, я не знаю как мне задать В МОЕМ СЛУЧАЕ... $newarray=array(); foreach($array as $item){ $newarray[$item['data']][] = [$item['price']][$item['cat']][$item['cat_id']][]; } не пашет, я чето путаю... Как отсортировать-то? |
27.02.2012, 20:09 | #3 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
вопрос закрыт, сам допер...
$newarray=array(); foreach($array as $item){ $newarray[$item['data']][] = [$item['price']] $newarray[$item['data']][] = [$item['cat']] $newarray[$item['data']][] = [$item['cat_id']]; } |
27.02.2012, 22:49 | #6 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
блин, извиняйте за код без тега..
так как быть-то? или непонятно разъяснил суть вопроса?.. |
28.02.2012, 00:06 | #7 |
blocked
|
нужно найти какой нибудь критерий за который зацепиться (что естественно и он у тебя есть [я не вникал]), а потом почитай методы сортировки массива они для всех языков одинаковы (и сортируй по этому критерию) и размерность массива как таковое не важна (с размерностью уже сам додумаешь) http://www.vzmakh.ru/info/pascal/modules/page14.html
ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил.... (и гемор с плечь) - но конечно при наличии возможности такой |
28.02.2012, 01:25 | #8 | |
Форумец
Сообщений: 39,860
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
Объясни толком - что нужно. Желательно - поподробнее. И внятно. Ты не прыгай по вершкам, ни дизайнером, ни, уж тем паче, программистом ты с таким подходом не станешь. И даже 17 лет - не оправдание. Я в 15 нудно Кнута в никитинской библиотеке конспектировал. А тебе надо всё и сразу. |
|
28.02.2012, 07:59 | #9 |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
Ну или бы изначально сделал так что-бы эти данные в таблице хранились. И с упорядочиванием и с фильтрацией все проблемы бы решил язык SQL
|
28.02.2012, 14:27 | #10 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
Я уж написал, что разобрался)))
ЗЫ: БД настолько объемна, что этот массив уже дважды обработанная выборка с не менее замороченными фильтрами. |
28.02.2012, 14:36 | #11 |
Форумец
Сообщений: 1,834
Регистрация: 04.04.2005
Не в сети |
|
28.02.2012, 14:45 | #12 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
Vital_N,не то слово)
|
28.02.2012, 14:48 | #13 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
А вот еще кстати интересный момент, заинтересовало.
Есть числа, точно не помню, к примеру: 12234234, 1724234, 1785023957 Т.е. разной даже длины, и по факту как чила разные. Если у поля формат INT, то сортируются как надо, а если TEXT, то вообще я не понимаю по какой схеме они сортируются..т.е. order by и ASC и DESC очень оригинально упорядочивают. По какой схеме-то сортируются числа в полях TEXT? |
28.02.2012, 15:04 | #15 |
Форумец
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30
Не в сети |
вроде и не по алфавиту...
большие вперемешку с малыми шли числами, а не сначала маленькие потом большие или наоборот. |
28.02.2012, 23:19 | #16 | |
highly mean
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35
Не в сети |
Цитата:
http://itif.ru/kodirovka-mysql-kak-izbezhat-oshibok/ |
|
28.02.2012, 23:24 | #17 | |
Форумец
Сообщений: 39,860
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
Цитата:
И на основе этого задумайся - не имеет ли смысл типизировать данные перед сортировкой. Или хотя бы вставлять leading zero + ограничение по длине. |
|
28.02.2012, 23:26 | #18 | |
highly mean
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35
Не в сети |
Насчет оригинальности, вот выдержка из документации sqlite:
Цитата:
Последний раз редактировалось silly; 28.02.2012 в 23:48. |
|
29.02.2012, 12:54 | #20 |
Форумец
Сообщений: 39,860
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
На счет этого:
могу только одно сказать - мсье знает толк в извращениях))) |
29.02.2012, 13:45 | #21 | |
blocked
|
Цитата:
как пример: берем 5 текстовых файлов - присваиваем им имена цифрой по которой сортируем 1.txt, 2.txt и так далее - открываем по нужной нам сортировке (по возрасанию или убыванию - по очереди) читаем данные , юзаем их ....... всё. [и сортировать нечего] [варианты совпадения не рассматривал - при возможности совпадения нужно подключать доп параметр чтобы выбрать какой первее..] - эт я так .... )) ps/ нужно видеть всю картину чтобы выбрать оптимальный путь и мусолить можно вечно и все равно будет скока людей столько и мнений как правильней (кому как легче) метод пузырька никто не отменял )) |
|