-2

我有一个以下格式的数组 - 我希望能够对其进行排序,因此最高价格是第一位的 - 我已经尝试过 array_multisort() 但到目前为止我没有任何运气。

    $working[33] = array('id' => '33', 'price' => '250.00');
    $working[34] = array('id' => '34', 'price' => '277.88');

使用某些功能按价格排序最终产品应如下所示:- 因为 277 价格大于 250

    $working[34] = array('id' => '34', 'price' => '277.88');
    $working[33] = array('id' => '33', 'price' => '250.00');
4

6 回答 6

7

排序使用usort

usort($working, function($a, $b) {
    return $a['price'] < $b['price'] ? 1 : -1;
});
于 2013-07-26T09:32:56.120 回答
2

你可以用array_multisort来做

文档中的示例。

于 2013-07-26T09:33:14.433 回答
2

使用以下功能来解决您的问题

    function multisort (&$array, $key) {
         $valsort=array();
         $ret=array();
         reset($array);
         foreach ($array as $ii => $va) {
            $valsort[$ii]=$va[$key];
         }
         asort($valsort);
         foreach ($valsort as $ii => $va) {
             $ret[$ii]=$array[$ii];
         }
         $array=$ret;
     }

multisort($multiarr,"order");
于 2013-07-26T09:31:43.523 回答
1

删除引号或使用数字排序。

字符串“24”大于“1834”,因为 2 大于 1。

我的解决方案

$working[33] = array('id' => '33', 'price' => '250.00');
$working[34] = array('id' => '34', 'price' => '277.88');
$working[35] = array('id' => '35', 'price' => '1289.57');
$working[36] = array('id' => '36', 'price' => '15.42');

foreach ($working as $key => $row) {
    $price[$key] = $row['price'];
}

array_multisort($price, SORT_NUMERIC, $working);

var_dump($working);

输出

array(4) {
  [0]=>
  array(2) {
    ["id"]=>
    string(2) "36"
    ["price"]=>
    string(5) "15.42"
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(2) "33"
    ["price"]=>
    string(6) "250.00"
  }
  [2]=>
  array(2) {
    ["id"]=>
    string(2) "34"
    ["price"]=>
    string(6) "277.88"
  }
  [3]=>
  array(2) {
    ["id"]=>
    string(2) "35"
    ["price"]=>
    string(7) "1289.57"
  }
}
于 2013-07-26T09:31:36.303 回答
-1

请参阅在 php 中排序数组以解决您的问题

于 2013-07-26T09:32:43.830 回答
-1
    usort($working, function ($a, $b) {
        return bccomp($a['price'], $b['price'], 2);
    });
于 2019-06-04T17:40:32.197 回答