5

私は次の配列を持っています:

Array
(
[0] => Array
    (
        [note] => test
        [year] => 2011
        [type] => football
    )

[1] => Array
    (
        [note] => test1
        [year] => 2010
        [type] => basket
    )

[2] => Array
    (
        [note] => test2
        [year] => 2012
        [type] => football
    )

[3] => Array
    (
        [note] => test3
        [year] => 2009
        [type] => basket
    )

[4] => Array
    (
        [note] => test4
        [year] => 2010
        [type] => football
    )

)

そして、最初に別の配列に従ってタイプ別に並べ替えたいと思います。

例えば:$sort = array('football','basket');

そしてその後年ごとに。

どうやってやるの?

ありがとう。

必要な出力は次のとおりです。

Array
(
[2] => Array
    (
        [note] => test2
        [year] => 2012
        [type] => football
    )
[0] => Array
    (
        [note] => test
        [year] => 2011
        [type] => football
    )
[4] => Array
    (
        [note] => test4
        [year] => 2010
        [type] => football
    )

[1] => Array
    (
        [note] => test1
        [year] => 2010
        [type] => basket
    )

[3] => Array
    (
        [note] => test3
        [year] => 2009
        [type] => basket
    )

)

インデックス値をリセットしてもかまいません。

ありがとう。

4

3 に答える 3

4

そのまま実行するとクロージャをサポートするバージョンのPHPが必要です

セカンダリ配列は、ソート自体の外部で定義できます。クロージャをサポートできない場合は、これを直接ソートルーチンに入れることができます。

$sortBy = array('football', 'basket');

ソートルーチン。

タイプが同じ場合は年で並べ替え、それ以外の場合は$sortBy配列内のタイプで並べ替えます。

usort($a, function($a, $b) use ($sortBy) {
    if ($a['type'] == $b['type']) {
        return ($b['year'] - $a['year']);
    }
    $typeOrder = array_flip($sortBy);
    return $typeOrder[$a['type']] - $typeOrder[$b['type']];
});
于 2012-07-29T09:04:54.383 に答える
2

を使用しarray_multisortます。配列が$arr次のようになっていると仮定します。

foreach($arr as $key=>$row) {
    $type[$key] = $row['type'];
    $year[$key] = $row['year'];
}
array_multisort($type, SORT_ASC, $year, SORT_ASC, $arr);

タイプの順序を指定する中毒性のある配列を使用するには、次のようにします。

$sortBy = array('football','basket');
foreach($arr as $key=>$row) {
    $type[$key] = array_search($row['type'],$sortBy);
    $year[$key] = $row['year'];
}
array_multisort($type, SORT_ASC, $year, SORT_ASC, $arr);

リンクの例:

http://codepad.org/qhZCpbZE

于 2012-07-29T08:54:42.310 に答える
1

usortを使用する

function byType($a, $b)
{
    if ($a['type'] == $b['type']) {
        return 0;
    }

    foreach(array('football','basket') as $type) {
        if ($a['type']=$type) return -1;
        if ($b['type']=$type) return 1;
    }

    return 0;
}


function byYear($a, $b)
{
    if ($a['year'] == $b['year']) {
        return 0;
    }
    return ($a['year'] < $b['year']) ? -1 : 1;
}

usort($array,"byType");
usort($array,"byYear");
于 2012-07-29T08:49:46.537 に答える