【问题标题】:sort multidimensional array with different types of index使用不同类型的索引对多维数组进行排序
【发布时间】:2014-02-16 11:48:32
【问题描述】:

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

感谢您的回复。

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:

    你想要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) ...
    

    【讨论】:

      【解决方案2】:

      您说您尝试了 php.net 上的功能。你确定 ksort 不起作用吗? http://us3.php.net/ksort

      【讨论】:

      • ksort 按键排序,而不是按字段。
      • 是的,我的错误,只看到了键的值。 us3.php.net/uasort 会给你灵活性。您可以定义它的排序方式。因此,如果键不是有效价格,请使用子元素的价格值。或者在数组中搜索与某种格式匹配的值并将它们推送到另一个数组中。约翰也打败了我:P
      猜你喜欢
      • 1970-01-01
      • 2015-08-27
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2021-11-08
      • 2015-11-02
      相关资源
      最近更新 更多