1

配列を「ヒット」で並べ替えたいのですが、特定のIDを探してそれを最初の反復として設定し、「ヒット」の並べ替えを続行したいと思います。

たとえば、多次元配列があります。

$myarray = array(
    array(
        "id"=>10,
        "hits"=>80
    ),
    array(
        "id"=>14,
        "hits"=>50
    ),
    array(
        "id"=>15,
        "hits"=>700
    ),
    array(
        "id"=>18,
        "hits"=>200
    )
);

idが特定のものであるかどうかをテストしたいと思います。つまり、id == 18の場合は最初に配置し、次にヒットで並べ替えます。usortとカスタム関数を使用してこれを行うにはどうすればよいですか?

私は次のようなものを探していると思います:

function customsort($a,$b){
    if($a["id"]==18){ //or b==18?
        return -1;
    } else {
        return $a["hits"]>$b["hits"];
    }
}

usort($myarray,"customsort");

私が望む結果は、注文が次のようになることです。

array(
    "id"=>18,
    "hits"=>200
),
array(
    "id"=>14,
    "hits"=>50
),
array(
    "id"=>10,
    "hits"=>80
),
array(
    "id"=>15,
    "hits"=>700
)

(または、ABCDとラベル付けされている場合は、DBACである必要があります)

4

1 に答える 1

1

これが機能しない可能性があるのは、コード内の唯一のことですreturn $a["hits"]>$b["hits"];。関数は1/-1のみを返す必要があるため(true / falseではない)、その行を:に変更するreturn $a["hits"]>$b["hits"]?1:-1;と、期待どおりに機能するはずです。

案の定、動作します:http: //codepad.org/ItyIa7fB

于 2012-07-02T08:51:10.617 に答える