PHP 配列を任意順で並べ替え

配列の並べ替えで比較キーを任意順で並べ替えたい場合の参考に。。。
この例では配列の ‘kind’ という値を 3 < 4 < 1 < 2 という順番で並べ替えます。

<?php
// 配列
$operators = array ();
$operators[] = array('name' => 'foo1', 'kind' => '1');
$operators[] = array('name' => 'foo2', 'kind' => '2');
$operators[] = array('name' => 'foo3', 'kind' => '3');
$operators[] = array('name' => 'foo4', 'kind' => '4');
$operators[] = array('name' => 'foo5', 'kind' => '3');
$operators[] = array('name' => 'foo6', 'kind' => '3');
$operators[] = array('name' => 'foo7', 'kind' => '2');
$operators[] = array('name' => 'foo8', 'kind' => '4');
$operators[] = array('name' => 'foo9', 'kind' => '1');

// 並べ替え(kind が 3,4,1,2) の順
usort($operators, function($a, $b) {
    if ($a['kind'] == 3)
    {
        if ($b['kind'] == 3)
        {
            return 0;
        }
        return -1;
    }
    else if ($a['kind'] == 4)
    {
        if ($b['kind'] == 4)
        {
            return 0;
        }
        else if ($b['kind'] == 3)
        {
            return 1;
        }
        return -1;
    }
    else if ($a['kind'] == 1)
    {
        if ($b['kind'] == 1)
        {
            return 0;
        }
        else if ($b['kind'] == 2)
        {
            return -1;
        }
        return 1;
    }
    else if ($a['kind'] == 2)
    {
        if ($b['kind'] == 2)
        {
            return 0;
        }
        return 1;
    }
    return 0;
});

// ソート結果
foreach($operators as $ope)
{
    echo 'Name: '.$ope['name'].' (Kind: '.$ope['kind'].')'.PHP_EOL;
}
?>

実行結果:

Name: foo6 (Kind: 3)
Name: foo3 (Kind: 3)
Name: foo5 (Kind: 3)
Name: foo4 (Kind: 4)
Name: foo8 (Kind: 4)
Name: foo9 (Kind: 1)
Name: foo1 (Kind: 1)
Name: foo2 (Kind: 2)
Name: foo7 (Kind: 2)

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です