使用不同类型的索引对多维数组进行排序

时间:2014-02-16 11:48:32

标签: php arrays sorting multidimensional-array

我真的很困惑在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中提到的许多功能,但没有找到任何可行的解决方案。你有什么想法?我真的陷入了困境。

感谢您的回复。

2 个答案:

答案 0 :(得分: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) ...

答案 1 :(得分:-1)

你说你在php.net上尝试过这些功能。你确定ksort不起作用吗? http://us3.php.net/ksort