2011-07-11 2 views
0

だからオブジェクトuasort問題 - 第一の出力に最大値

A 2列があった場合 - 値は> 10 8 6 4

B - 値は> 9 7 5 3

私はBをAの9に10、7の下に8などをマージしたい。

uasort($TopConsumers,array('Utilities','orderconsumers')); 
public static function orderConsumers($TopConsumers) 
{ 
    $a = $TopConsumers->outTotal; 
    $b = $TopConsumers->inTotal; 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a > $b) ? -1 : +1; 
} 

なぜこれが機能しないのですか?

答えて

0

ソート関数には、引数として$ aと$ bが必要です。配列自体ではありません。

public static function orderConsumers($a, $b) 
{ 
    if ($a->outTotal == $b->inTotal) { 
     return 0; 
    } 
    return ($a->outTotal > $b-inTotal) ? -1 : +1; 
} 

これは、2つの列で並べ替えるのはちょっと奇妙だと言いました。私はこれがあなたが探しているものをあなたに与えるだろうと確信していません。通常は、そのようなユーザーソート関数で同じ列名を比較します。

+0

よくやっているのは、インバウンドトラフィック用とアウトバウンドトラフィック用の2つの列を持っていることです。私はどちらが高いかをウェブページに表示する必要があります。これは、彼らが発信または着信トラフィックのトーンを使用していることを私たちのスタッフに通知します。そして、私たちはそれらを秩序あるものにするために嘘をつきます。いくつかの洞察を与えることを願っています。 – Luke

+0

public static function OrderC($ a、$ b) { if($ a-> inTotal == $ b-> outTotal){ return 0; } return($ a-> inTotal> $ b-> outTotal)? -1:+1; } *** 7,541.11 *** 6,901.45 *** 7,070.75 *** 10,037.45 didntの仕事: - :$ aと$(( – Luke

+0

私はあなたが言ったが、それをこのように考えているものを手に入れますあなたのデータセット内の異なる行です。あなたは、同じ行ではなく、2つの異なる行のインバウンドとインバウンドを比較しています。ちょっとしたテストをしましたが、これは間違いなくあなたに必要なものを与えません。 – Cfreak

3

まず、配列をマージしてからソートする必要があります。

$merged = array_merge($TopConsumers->outTotal, $TopConsumers->inTotal); 
sort($merged); 
+0

私は値を1つだけ表示する必要があります。申し訳ありません、指定するのを忘れました – Luke

+0

+1: 'uasort()'を使用しないために@Luke:ごめんなさい、どういう意味ですか?重複はありませんか? - > 'array_unique()' – phant0m

+0

申し訳ありません私は十分な情報なしで間違った質問をしました。私のせいで、あなたも助けてくれてありがとう! – Luke

関連する問題