Большой Воронежский Форум

Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел.
Вернуться   Большой Воронежский Форум » Компьютеры и все, что с ними связано » » Веб-дизайн
Что касается web-а... WebMaster-а Воронежа - объединяйтесь!

Ответ
 
Опции темы
Старый 27.02.2012, 19:27   #1   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
Как отсортировать массив??

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   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
Вот был пример:
$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   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
вопрос закрыт, сам допер...
$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, 20:12   #4   
Форумец
 
Сообщений: 3,705
Регистрация: 02.08.2006

svga вне форума Не в сети
AlexanderSergeev, ты там не систему наведения ракет пишешь? Массивы какие-то, карты гугла...
  Ответить с цитированием
Старый 27.02.2012, 22:08   #5   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
AlexanderSergeev, bb-тег [code] существует, я сам его видел.
  Ответить с цитированием
Старый 27.02.2012, 22:49   #6   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
блин, извиняйте за код без тега..
так как быть-то?
или непонятно разъяснил суть вопроса?..
  Ответить с цитированием
Старый 28.02.2012, 00:06   #7   
blocked
 
Сообщений: 20,415
Регистрация: 21.03.2010
Записей в дневнике: 1

anadonam вне форума Не в сети
нужно найти какой нибудь критерий за который зацепиться (что естественно и он у тебя есть [я не вникал]), а потом почитай методы сортировки массива они для всех языков одинаковы (и сортируй по этому критерию) и размерность массива как таковое не важна (с размерностью уже сам додумаешь) http://www.vzmakh.ru/info/pascal/modules/page14.html

ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил.... (и гемор с плечь) - но конечно при наличии возможности такой
  Ответить с цитированием
Старый 28.02.2012, 01:25   #8   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,860
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от AlexanderSergeev Посмотреть сообщение
блин, извиняйте за код без тега..
так как быть-то?
или непонятно разъяснил суть вопроса?..
Сам то как думаешь?)))
Объясни толком - что нужно. Желательно - поподробнее. И внятно.
Ты не прыгай по вершкам, ни дизайнером, ни, уж тем паче, программистом ты с таким подходом не станешь.
И даже 17 лет - не оправдание. Я в 15 нудно Кнута в никитинской библиотеке конспектировал.
А тебе надо всё и сразу.
  Ответить с цитированием
Старый 28.02.2012, 07:59   #9   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от anadonam Посмотреть сообщение
ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил.... (и гемор с плечь) - но конечно при наличии возможности такой
Ну или бы изначально сделал так что-бы эти данные в таблице хранились. И с упорядочиванием и с фильтрацией все проблемы бы решил язык SQL
  Ответить с цитированием
Старый 28.02.2012, 14:27   #10   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
Я уж написал, что разобрался)))

ЗЫ: БД настолько объемна, что этот массив уже дважды обработанная выборка с не менее замороченными фильтрами.
  Ответить с цитированием
Старый 28.02.2012, 14:36   #11   
Форумец
 
Аватар для Vital_N
 
Сообщений: 1,834
Регистрация: 04.04.2005

Vital_N вне форума Не в сети
Цитата:
Сообщение от anadonam Посмотреть сообщение
ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил....
оригинально - пять баллов!
  Ответить с цитированием
Старый 28.02.2012, 14:45   #12   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
Vital_N,не то слово)
  Ответить с цитированием
Старый 28.02.2012, 14:48   #13   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
А вот еще кстати интересный момент, заинтересовало.

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

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

По какой схеме-то сортируются числа в полях TEXT?
  Ответить с цитированием
Старый 28.02.2012, 14:52   #14   
Форумец
 
Аватар для Vital_N
 
Сообщений: 1,834
Регистрация: 04.04.2005

Vital_N вне форума Не в сети
AlexanderSergeev, не поверишь - сортируются как строки )
  Ответить с цитированием
Старый 28.02.2012, 15:04   #15   
Форумец
 
Аватар для AlexanderSergeev
 
Сообщений: 1,076
Регистрация: 27.11.2008
Возраст: 30

AlexanderSergeev вне форума Не в сети
вроде и не по алфавиту...
большие вперемешку с малыми шли числами, а не сначала маленькие потом большие или наоборот.
  Ответить с цитированием
Старый 28.02.2012, 23:19   #16   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от AlexanderSergeev Посмотреть сообщение
вроде и не по алфавиту...
большие вперемешку с малыми шли числами, а не сначала маленькие потом большие или наоборот.
Ну ты иногда как спросишь… непонятно, смеяться нужно или плакать.

http://itif.ru/kodirovka-mysql-kak-izbezhat-oshibok/
  Ответить с цитированием
Старый 28.02.2012, 23:24   #17   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,860
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от AlexanderSergeev Посмотреть сообщение
вроде и не по алфавиту...
большие вперемешку с малыми шли числами, а не сначала маленькие потом большие или наоборот.
Во-первых, прочитай что написал предыдущий товарищ. Во вторых - изучи что есть ASCII.
И на основе этого задумайся - не имеет ли смысл типизировать данные перед сортировкой.
Или хотя бы вставлять leading zero + ограничение по длине.
  Ответить с цитированием
Старый 28.02.2012, 23:26   #18   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от 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.

Последний раз редактировалось silly; 28.02.2012 в 23:48.
  Ответить с цитированием
Старый 29.02.2012, 11:09   #19   
Форумец
 
Аватар для Vital_N
 
Сообщений: 1,834
Регистрация: 04.04.2005

Vital_N вне форума Не в сети
Цитата:
Сообщение от silly Посмотреть сообщение
Насчет оригинальности, вот выдержка из документации sqlite:
тут не sqlite и не масса данных явно ) оверхед будет огромный, отсортировать массив будет мудрее )
  Ответить с цитированием
Старый 29.02.2012, 12:54   #20   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,860
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
На счет этого:
Цитата:
Сообщение от anadonam Посмотреть сообщение
ps/ я бы пошел по более простому пути - херакнул бы этот масиив в таблицу БД (с 4-мя полями соответственно ) а потом выборкой с параметром order by все и решил.... (и гемор с плечь) - но конечно при наличии возможности такой
могу только одно сказать - мсье знает толк в извращениях)))
  Ответить с цитированием
Старый 29.02.2012, 13:45   #21   
blocked
 
Сообщений: 20,415
Регистрация: 21.03.2010
Записей в дневнике: 1

anadonam вне форума Не в сети
Цитата:
Сообщение от Vital_N Посмотреть сообщение
тут не sqlite и не масса данных явно ) оверхед будет огромный, отсортировать массив будет мудрее )
это называется научи дурака богу малиться он и лоб расшибет )) - ну естественно конструктив нужно продумывать еще до того как вообще алгоритмы выдумывать - вариантов "тыща".. с "5мя" значениями оно вообще сортировать и не нужно если сесть подумать и разобраться как хранить данные ...

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

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



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind