Большой Воронежский Форум
» Веб-дизайн>Как отсортировать массив??
AlexanderSergeev 19:27 27.02.2012
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
)
)
)


Короче выбрать с одинаковыми датами, отсортировать по ним, а остальные элементыоставить как есть, просто по порядку. [Ответ]
AlexanderSergeev 19:31 27.02.2012
Вот был пример:
$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']][];
}
не пашет, я чето путаю...

Как отсортировать-то? [Ответ]
AlexanderSergeev 20:09 27.02.2012
вопрос закрыт, сам допер...
$newarray=array();
foreach($array as $item){
$newarray[$item['data']][] = [$item['price']]
$newarray[$item['data']][] = [$item['cat']]
$newarray[$item['data']][] = [$item['cat_id']];
} [Ответ]
svga 20:12 27.02.2012
AlexanderSergeev, ты там не систему наведения ракет пишешь? Массивы какие-то, карты гугла... [Ответ]
silly 22:08 27.02.2012
AlexanderSergeev, bb-тег [code] существует, я сам его видел. [Ответ]
AlexanderSergeev 22:49 27.02.2012
блин, извиняйте за код без тега..
так как быть-то?
или непонятно разъяснил суть вопроса?.. [Ответ]
anadonam 00:06 28.02.2012
нужно найти какой нибудь критерий за который зацепиться (что естественно и он у тебя есть [я не вникал]), а потом почитай методы сортировки массива они для всех языков одинаковы (и сортируй по этому критерию) и размерность массива как таковое не важна (с размерностью уже сам додумаешь) http://www.vzmakh.ru/info/pascal/modules/page14.html

ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил.... (и гемор с плечь) - но конечно при наличии возможности такой [Ответ]
Spectator 01:25 28.02.2012

Сообщение от AlexanderSergeev:
блин, извиняйте за код без тега..
так как быть-то?
или непонятно разъяснил суть вопроса?..

Сам то как думаешь?)))
Объясни толком - что нужно. Желательно - поподробнее. И внятно.
Ты не прыгай по вершкам, ни дизайнером, ни, уж тем паче, программистом ты с таким подходом не станешь.
И даже 17 лет - не оправдание. Я в 15 нудно Кнута в никитинской библиотеке конспектировал.
А тебе надо всё и сразу. [Ответ]
Hopkroft 07:59 28.02.2012

Сообщение от anadonam:
ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил.... (и гемор с плечь) - но конечно при наличии возможности такой

Ну или бы изначально сделал так что-бы эти данные в таблице хранились. И с упорядочиванием и с фильтрацией все проблемы бы решил язык SQL [Ответ]
AlexanderSergeev 14:27 28.02.2012
Я уж написал, что разобрался)))

ЗЫ: БД настолько объемна, что этот массив уже дважды обработанная выборка с не менее замороченными фильтрами. [Ответ]
Vital_N 14:36 28.02.2012

Сообщение от anadonam:
ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил....

оригинально - пять баллов! [Ответ]
AlexanderSergeev 14:45 28.02.2012
Vital_N,не то слово) [Ответ]
AlexanderSergeev 14:48 28.02.2012
А вот еще кстати интересный момент, заинтересовало.

Есть числа, точно не помню, к примеру: 12234234, 1724234, 1785023957
Т.е. разной даже длины, и по факту как чила разные.

Если у поля формат INT, то сортируются как надо, а если TEXT, то вообще я не понимаю по какой схеме они сортируются..т.е. order by и ASC и DESC очень оригинально упорядочивают.

По какой схеме-то сортируются числа в полях TEXT? [Ответ]
Vital_N 14:52 28.02.2012
AlexanderSergeev, не поверишь - сортируются как строки ) [Ответ]
AlexanderSergeev 15:04 28.02.2012
вроде и не по алфавиту...
большие вперемешку с малыми шли числами, а не сначала маленькие потом большие или наоборот. [Ответ]
silly 23:19 28.02.2012

Сообщение от AlexanderSergeev:
вроде и не по алфавиту...
большие вперемешку с малыми шли числами, а не сначала маленькие потом большие или наоборот.

Ну ты иногда как спросишь… непонятно, смеяться нужно или плакать.

http://itif.ru/kodirovka-mysql-kak-izbezhat-oshibok/ [Ответ]
Spectator 23:24 28.02.2012

Сообщение от AlexanderSergeev:
вроде и не по алфавиту...
большие вперемешку с малыми шли числами, а не сначала маленькие потом большие или наоборот.

Во-первых, прочитай что написал предыдущий товарищ. Во вторых - изучи что есть ASCII.
И на основе этого задумайся - не имеет ли смысл типизировать данные перед сортировкой.
Или хотя бы вставлять leading zero + ограничение по длине. [Ответ]
silly 23:26 28.02.2012

Сообщение от Vital_N:
оригинально - пять баллов!

Насчет оригинальности, вот выдержка из документации sqlite:

Сообщение от :
Internal or temporary databases

For programs that have a lot of data that must be sifted and sorted in diverse ways, it is often easier and quicker to load the data into an in-memory SQLite database and use queries with joins and ORDER BY clauses to extract the data in the form and order needed rather than to try to code the same operations manually. Using an SQL database internally in this way also gives the program greater flexibility since new columns and indices can be added without having to recode every query.

[Ответ]
Vital_N 11:09 29.02.2012

Сообщение от silly:
Насчет оригинальности, вот выдержка из документации sqlite:

тут не sqlite и не масса данных явно ) оверхед будет огромный, отсортировать массив будет мудрее ) [Ответ]
Spectator 12:54 29.02.2012
На счет этого:

Сообщение от anadonam:
ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил.... (и гемор с плечь) - но конечно при наличии возможности такой

могу только одно сказать - мсье знает толк в извращениях))) [Ответ]
anadonam 13:45 29.02.2012

Сообщение от Vital_N:
тут не sqlite и не масса данных явно ) оверхед будет огромный, отсортировать массив будет мудрее )

это называется научи дурака богу малиться он и лоб расшибет )) - ну естественно конструктив нужно продумывать еще до того как вообще алгоритмы выдумывать - вариантов "тыща".. с "5мя" значениями оно вообще сортировать и не нужно если сесть подумать и разобраться как хранить данные ...

как пример: берем 5 текстовых файлов - присваиваем им имена цифрой по которой сортируем 1.txt, 2.txt и так далее - открываем по нужной нам сортировке (по возрасанию или убыванию - по очереди) читаем данные , юзаем их ....... всё. [и сортировать нечего] [варианты совпадения не рассматривал - при возможности совпадения нужно подключать доп параметр чтобы выбрать какой первее..] - эт я так .... ))

ps/ нужно видеть всю картину чтобы выбрать оптимальный путь и мусолить можно вечно и все равно будет скока людей столько и мнений как правильней (кому как легче)
метод пузырька никто не отменял )) [Ответ]
Вверх