Использование PHP array_multisort для сортировки многомерного ассоциативного массива, который содержит несколько целочисленных ключей. - PullRequest
0 голосов
/ 07 мая 2011

Если ассоциативный массив содержит целочисленные ключи, array_multisort автоматически сбрасывает их, поэтому я теряю данные. Вот небольшой пример. Любые решения?

$products = array ( '777.777' => array('price' => 10, 'name' => 'a'),
                    '777' => array('price' => 100, 'name' => 'b')
                  );    

$sort_field     = 'price';
$destination    = SORT_ASC;
$sort_array = array();
foreach ($products as $productId => $product) {
    $sort_array[$productId] = $product[$sort_field];
}       
array_multisort($sort_array, $destination, $products);
print_r($products); 
   // Array ( [777.777] => Array ( [price] => 10 [name] => a ) [0] => Array ( [price] => 100 [name] => b ) ) 

1 Ответ

0 голосов
/ 01 июля 2011

Попробуйте это

<?php

    $products = array('777.777' => array('price' => 10, 'name' => 'a'),
                    '777' => array('price' => 100, 'name' => 'b')
                  );

    $products = subval_sort($products, 'price');

    function subval_sort($array, $subkey) {

        foreach ($array as $key => $value) {

            $newArray[$key] = $value[$subkey];
        }

        arsort($newArray);

        foreach ($newArray as $key => $value) {

            $finalArray[$key] = $array[$key];
        }

        return $finalArray;
    }

    var_dump($products);

?>

http://codepad.org/VgdGdWyQ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...