2016-07-01 7 views
0

返すデータの中で最も低い価格を見つけるために、私はusortを使用しようとしています。usortを使用して直列で最小値を探す=>多次元

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]またはなしでデータにアクセスしないように見えます。

usortなどを使用して多次元配列で最低価格を返すにはどうすればよいですか?

答えて

0

あなたは以下のようにそれを実行する必要があります -

<?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 

Alそう直接あなたも、このようにそれを行うことができます任意の新しい配列変数を使用しない: -

https://eval.in/599411

+0

私はなぜ私のソートではないのかわかりませんでしたが、あなたの出力を見て、あなたの価格がソートされていないことに気付きました:( – dooode

+0

@dooode my both各リンクの2番目の配列を見てください –

+0

実際の返品データはLTC_BTCであり、[0] – dooode

0

あなたはこの方法を試すことができます。

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); 
+0

私はポストと同じ機能を呼び出すことを試み、また、使用してみました - > $ oorders = CMP($ openorders);それでもエラーが発生しました。変数$ openordersに自分のデータが含まれています。 – dooode

+0

回答が更新されました。 @ dooode –

+0

要素[0]を使用すると、私はエラーhttps://bpaste.net/show/24d7995e956aを吹いています。要素を削除してもエラーは消えますが、まだ並べ替えがありません – dooode

関連する問題