Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Сортировка многомерного ассоциативного массива


Автор: orenwd 22.3.2006, 09:12
Как можно сортировать многомерный ассоциативный массив
($findresult[$i]['posit']) по значениям поля 'posit'?
Благодарю за ответы.

Автор: -=Ustas=- 22.3.2006, 10:12
ksort() пробовал?

Автор: orenwd 22.3.2006, 11:52
По описанию данной функции вроде не подходит, перечитаю еще раз. Также необходимо учитывать что на самом деле массив ассоциат. и полностью вот такой:
$findresult[$i]['posit']['what'], а применение данной функции нарушит связи между 'posit' и 'what'.

Автор: -=Ustas=- 22.3.2006, 12:01
Цитата(orenwd @ 22.3.2006, 11:52 Найти цитируемый пост)
а применение данной функции нарушит связи между 'posit' и 'what'.

Цитата

Сортирует массив по ключам, сохраняя корреляцию ключей и данных. Это используется в основном в ассоциативных массивах.

Автор: orenwd 22.3.2006, 16:21
Уточню вопрос. Имеем массив:
Array ( [0] => Array ( [posit] => 0.3 [link] => text1 ) [1] => Array ( [posit] => 4.1 [link] => text2) [2] => Array ( [posit] => 1.9 [link] => text3 )
Необходимо отсортировать его по ключу posit присутствующему в каждом подмассиве основного массива. Как это можно сделать?

Автор: Darhazer 22.3.2006, 16:41
Код

<?
function cmp($a, $b)
{
   if ($a['posit'] == $b['posit']) {
       return 0;
   }
   return ($a['posit'] < $b['posit']) ? -1 : 1;
}

$arr =  Array (
 0 => Array ( 'posit' => 0.3,
             'link' => 'text1' ),
 1 => Array ( 'posit' => 4.1,
            'link' => 'text2'),
 2 => Array ( 'posit' => 1.9,  'link' => 'text3' )
 );
 print_r($arr);
 usort($arr, "cmp");
 print_r($arr);
 ?>

Автор: EDuard 9.5.2007, 10:15
Аналогичная ситцация. 

Есть массив вида 

Array ( 
[news_title] => Array ( 
                                    [0] => news_title_1 
                                    [1] => news_title_2
                                    [2] => news_title_3
                                   )
 [id] => Array ( [0] => 4
                        [1] => 3
                        [2] => 2
                       )
[news_short] => Array ( [0] => news_1
                                       [1] => news_2
                                       [2] => news_3
                                      )
[news_date] => Array ( 
                                       [0] => 2007-05-11
                                       [1] => 2007-05-09
                                       [2] => 2007-05-10
                                      )
        ) 

Нужно отсортировать по полю news_date возможно ли это и если да, то как?
Большое спасибо!

Автор: SelenIT 9.5.2007, 23:05
EDuard, для Вашего случая, по-моему, идеально подходит http://www.php.net/manual/ru/function.array-multisort.php.

Хотя есть подозрение, что можно отсортировать Ваши новости еще на этапе формирования этого массива. Откуда эти новости берутся, не из БД сдучайно?

Автор: EDuard 13.5.2007, 18:47
SelenIT, можешь привести пример с array_multisort? 

Автор: Alex_B 15.5.2007, 15:12
А вот еще вопрос на эту тему/
Есть двумерный хеш массив:

Код

$prodact = array(
        "srt1"    => array("NAME"=>"name1", "PRICE" =>13),
        "srt2"    => array("NAME"=>"name2", "PRICE" =>13),
        "srt3"    => array("NAME"=>"name3", "PRICE" => 60),
    );


Каким образом можно в массиве вывести для каждого ключа srt1, srt2 и т.д. определнные значение ключей вложенных массивов, например ключа PRICE.

Как, хотябы примерно, будет выглядеть функция которая в качестве параметра получает ключ srt1(или srt2, или srt3) а возвращает ассоциативный этому ключу массив.
Т.е. фунглядит как-то так:

Код

function GetValues(key)
{
    ...
    return sechArray;    
}


А использовать её, можно вот так:
 
Код

$a =  function GetValues('str1');
echo $a["PRICE"];


Спасибо.

Автор: SelenIT 15.5.2007, 15:49
Alex_B, а просто $prodact['str1']["PRICE"] разве не подходит?

Автор: Alex_B 15.5.2007, 16:34
SelenIT, спасибо, я плохо высказался.
Нужно было перебрать все PRICE, для этого сдела так:

Код

foreach($prodact as $arItem){
    echo $arItem["PRICE"];
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)