使用ussort查找序列中的最低值=>多维


using usort to find lowest in series => multidimensional

我正在尝试使用ussort来查找返回数据中的最低'价格'。

function cmp($a, $b)
{
        return strcmp($a[0]["price"], $b[0]["price"]);
}
usort($openorders, "cmp");
var_dump($openorders);
输出:

array(1) {
  [0]=>
  array(3) {
    [0]=>
    array(7) {
      ["order_id"]=>
      string(8) "43410734"
      ["price"]=>
      string(9) "0.0035347"
    }
    [1]=>
    array(7) {
      ["order_id"]=>
      string(8) "43410610"
      ["price"]=>
      string(9) "0.0032347"
    }
    [2]=>
    array(7) {
      ["order_id"]=>
      string(8) "43410581"
      ["price"]=>
      string(9) "0.0033347"
    }
  }
}

在我的函数中,我似乎甚至没有访问带[0]或不带[0]的数据。

如何使用ussort或类似的方法返回多维数组中的最低价格?

你需要这样做:-

<?php
$openorders= array(
  '0'=>
  array(
    '0'=>array(
      "order_id"=>"43410734",
      "price"=>"0.0035347"
    ),
    '1'=>array(
      "order_id"=>"43410610",
      "price"=>"0.0032347"
    ),
    '2'=>array(
      "order_id"=>"43410581",
      "price"=>"0.0033347"
    )
  )
); // original array
echo "<pre/>";print_r($openorders); // print original array
$new_openorders = $openorders[0]; // since original array have one extra level so assign it's inner array to a new variable
function sortByOrder($a, $b) { // callback function
    return strcmp($a["price"], $b["price"]);
}
usort($new_openorders, 'sortByOrder'); 
echo "<pre/>";print_r($new_openorders); // print the new array

输出:https://eval.in/599410

现在你可以很容易地做:-

$openorders[0] = $new_openorders; // to get back original array

也可以直接不使用任何新的数组变量,你可以这样做:-

https://eval.in/599411

您可以这样尝试:

function cmp($a, $b)
{
    $d1 = $a[0]['price'];
    $d2 = $b[0]['price'];
    if ($d1 == $d2) {
        return 0;
    }
    return ($d1 < $d2) ? -1 : 1;
}
usort($openorders[0], "cmp");
var_dump($openorders);