Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Нативная соротировка многомерного массива на PHP
 
 автор: Trivium   (18.09.2013 в 20:52)   письмо автору
 
 

Всем привет.
Есть многомерный массив вида:

$a = array(
             0 => array(
                    0 => '4x100',
                    1 => '12',
                    2 => '5,1'),
             1 => array(
                    0 => '4x98',
                    1 => '19',
                    2 => '3,4'),
             2 => array(
                    0 => '4x114,4',
                    1 => '15',
                    2 => '2,1'),
...
)

И этот массив надо как-то отсортировать по всем параметрам, при чём надо учитывать, что первый параметр в каждом подмассиве (например 4x98) это строка, т.е. сортировать надо нативным способом. array_mulitsort перепробовал все варианты и она не сортирует нативно, natsort не работает с многомерными массивами и usort так же сортирует как-то непонятно. Как можно стандартными средствами PHP или может есть у кого-то функции готовые? Обшарил уже полинета и форум

  Ответить  
 
 автор: confirm   (19.09.2013 в 22:07)   письмо автору
 
   для: Trivium   (18.09.2013 в 20:52)
 

>natsort не работает с многомерными массивами

А что мешает обойти его циклом?
<?
$a 
= array(
    
=> array( 
        
=> '4x100'
        
=> '12'
        
=> '5,1'), 
    
=> array( 
        
=> '4x98'
        
=> '19'
        
=> '3,4'), 
    
=> array( 
        
=> '4x114,4'
        
=> '15'
        
=> '2,1')
); 

array_map('natsort', &$a);

  Ответить  
 
 автор: Trivium   (20.09.2013 в 13:47)   письмо автору
 
   для: confirm   (19.09.2013 в 22:07)
 

Решил проблему. Сконвертил все массивы в строку и через usort сделал такую сортировку:
function cmp($a,$b) {
    return strnatcmp($a["sizes"], $b["sizes"]);
}

  Ответить  
 
 автор: confirm   (20.09.2013 в 14:45)   письмо автору
 
   для: Trivium   (20.09.2013 в 13:47)
 

Оригинально, учитывая то, что у вас значения и так строки.

  Ответить  
 
 автор: Trivium   (20.09.2013 в 14:52)   письмо автору
 
   для: confirm   (20.09.2013 в 14:45)
 

Всё в одну сконверчено.

  Ответить  
 
 автор: confirm   (20.09.2013 в 14:55)   письмо автору
 
   для: Trivium   (20.09.2013 в 14:52)
 

Вообще кошмар тогда.

  Ответить  
 
 автор: Trivium   (20.09.2013 в 15:03)   письмо автору
 
   для: confirm   (20.09.2013 в 14:55)
 

Зато всё работает раза в 2 быстрее, чем ты писал.

  Ответить  
 
 автор: confirm   (20.09.2013 в 15:08)   письмо автору
 
   для: Trivium   (20.09.2013 в 15:03)
 

Я не знаю чего вы там написали, но нет в вашем примере ничего являющегося числом, все строки. А уж как написать, это дело второе.

  Ответить  
 
 автор: Trivium   (20.09.2013 в 15:16)   письмо автору
 
   для: confirm   (20.09.2013 в 15:08)
 

И при чём здесь наличие или отсутствие строк? Я ж написал что сконвертил всё в одну строку и сделал её подэлементом массива. И всё прекрасно работает, в отличии от твоего.

  Ответить  
 
 автор: Trivium   (20.09.2013 в 15:07)   письмо автору
 
   для: confirm   (20.09.2013 в 14:55)
 

Тем более проверять надо, прежде чем советовать на форумах. Твоя сортировка вообще непонятно как сортирует.

  Ответить  
 
 автор: confirm   (20.09.2013 в 15:11)   письмо автору
 
   для: Trivium   (20.09.2013 в 15:07)
 

Не тыкать только, а уважать. Она сортирует по алгоритму "natural ordering", как это и делает nasort, о чем вы и говорили. Не понимаете этого, тогда читайте внимательно руководство.

  Ответить  
 
 автор: Trivium   (20.09.2013 в 15:12)   письмо автору
 
   для: confirm   (20.09.2013 в 15:11)
 

Ну вот возьми и проверь сначала, а потом советуй, умник.

  Ответить  
 
 автор: confirm   (20.09.2013 в 15:17)   письмо автору
 
   для: Trivium   (20.09.2013 в 15:12)
 

Если не научитесь уважать собеседника, тыкать ему, можете ожидать проблем.
Мне незачем проверять, и так хорошо знаю, что такое "natural ordering", а вот вы этого видимо не представляете, поэтому читайте.
Развелось кодеров сопливых, да еще с гонором.

  Ответить  
 
 автор: Trivium   (20.09.2013 в 15:35)   письмо автору
 
   для: confirm   (20.09.2013 в 15:17)
 

Да потому-что ТЫ мне уже наверно на 5 теме отвечаешь и всё хамство своё и понты наровишься проявить. Это много кого напрягает. Не знаешь, а советуешь тупые грабли. Не проверил свой говнокод, а советуешь его другим. Я твой говнокод проверил и говорю тебе: он не работает. Какие ещё вопросы есть? Без сопливых знаем про натурально-нативную сортировку, хватит уже понты ломать. Не умеешь - не берись советовать. И выкать я на хамство откровенное никому не собираюсь.

  Ответить  
 
 автор: confirm   (20.09.2013 в 15:43)   письмо автору
 
   для: Trivium   (20.09.2013 в 15:35)
 

Слюни то зачем распускать?
1. Вы, не я, упомянули nasort. А значит вы либо вообще не имеете представления как эта функция сортирует, либо не знаете чего вам надо.
2. Вы выставляете пример, в котором все значения строки - вопрос, а зачем конвертировать?
3. Если пример содержит не все вариации значений, то почему не описываете все, и если nasort не подходит, то почему указываете его?
Из всего этого следует, что ваш вопрос как игра в кошки мышки, да еще гонору под самое не хочу.
А я вас предупреждал - как аукнется, так и откликнется. Научитесь не тыкать людям, и описывать свой вопрос, иначе по выше сказанному только один вывод - вы не знаете то, что хотите использовать, и понту, так это с вашей стороны. А не потому, что я такой, и вы мне неприятны. Я добрый.

  Ответить  
 
 автор: Trivium   (20.09.2013 в 15:48)   письмо автору
 
   для: confirm   (20.09.2013 в 15:43)
 

Я прекрасно знаю нужна функция naTsort и зачем нужна функция strnatcmp. Без проверки вышеописанных кодов - считаю дальнейшее "общение" бессмысленным. Тем более, что я не вопрос уже задавал, а решил его ещё 2 дня назад.

  Ответить  
 
 автор: confirm   (20.09.2013 в 15:55)   письмо автору
 
   для: Trivium   (20.09.2013 в 15:48)
 

Ну если знаете, то сами подумайте - вопрос один и пример соответствующий, а выясняется совсем иная ситуация, действительно кошмарная и не понятная, если проецировать ее на вопрос.
Решили и слава богу, но уж выставляя вопрос расставляйте все точки на "и", чтобы не было ситуаций, когда решение далеко от сущности самого вопроса, чтобы потом не считать кого-то дураком и виноватым. Наверное таким образом.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования