2014-02-16 2 views
0

Я действительно запутался в сортировке многомерных массивов в PHP. У меня есть массив, как:сортировать многомерный массив с различными типами индексов

array(5) { 
    ["DH"]=> 
    array(3) { 
    ["price"]=> 
    string(5) "19.99" 
    ["merchant"]=> 
    string(16) "DH" 

    } 
    ["17.36"]=> 
    array(6) { 
    ["price"]=> 
    string(5) "17.36" 
    ["merchant"]=> 
    string(8) "Merchant" 
    ["rating"]=> 
    string(6) "95-97%" 
    ["reviews"]=> 
    string(5) "16990" 
    ["time"]=> 
    string(19) "2014-02-12 17:07:02" 

    } 
    ["hug"]=> 
    array(3) { 
    ["price"]=> 
    string(5) "19.99" 
    ["merchant"]=> 
    string(16) "hug" 

    } 
    ["22.95"]=> 
    array(6) { 
    ["price"]=> 
    string(5) "22.95" 
    ["merchant"]=> 
    string(8) "Merchant" 
    ["rating"]=> 
    string(7) "98-100%" 
    ["reviews"]=> 
    string(5) "61043" 
    ["time"]=> 
    string(19) "2014-02-12 17:07:02" 

    } 
    ["24.05"]=> 
    array(6) { 
    ["price"]=> 
    string(5) "24.05" 
    ["merchant"]=> 
    string(8) "Merchant" 
    ["rating"]=> 
    string(6) "90-94%" 
    ["reviews"]=> 
    string(4) "8754" 
    ["time"]=> 
    string(19) "2014-02-12 17:07:02" 

    } 
} 

для моего приложения, мне нужно, чтобы заказать эти 5 массивов с помощью значений, включая «цену» от низкого до высокого. Я уже пробовал много функций, упомянутых в php documentation, но не нашел никакого рабочего решения. У тебя есть идеи? Я действительно застрял в этом.

Спасибо за ваши ответы.

ответ

0

Вы хотите, чтобы uasort (которые сортируют по массивам по заданной пользователем функции.).

function sortByPrice($a, $b) 
{ 
    return floatval($b['price']) - floatval($a['price']); 
} 
uasort($assoc, 'sortByPrice'); 


// Keys are intact, but associative array is sorted. 
foreach ($assoc as $key=>$value)... 

Вы также можете сбросить все в более простой массив, частное использование usort но есть некоторые дополнительные шаги, так как вам нужно, чтобы выровнять его первым ..

$out = array(); 
function sortByPriceSimple($a, $b) 
{ 
    return floatval($b) - floatval($a); 
} 
foreach ($assoc as $value) 
{ 
    $out[] = $value; 
} 
usort($out, 'sortByPriceSimple'); 

// This will be an indexed (0 to N) array. 
foreach ($out as $index=>$value) ... 
+0

спасибо, что отлично работает :) –

+0

Тогда отметьте это как правильно. :) –

-1

Вы сказали, что пробовали функции на php.net. Вы уверены, что ksort не будет работать? http://us3.php.net/ksort

+0

ksort сортирует по ключам, а не по полю. –

+0

Да, моя ошибка, только видел значения, которые являются ключами. Http://us3.php.net/uasort предоставит вам гибкость. Вы можете определить способ сортировки. Поэтому, если ключ не является допустимой ценой, используйте значение цены подэлемента. Или найдите массив для значений, соответствующих определенному формату, и нажмите их в другой массив. Джон тоже избил меня: P – Darius

Смежные вопросы