1

名前、年齢、性別の代わりに、性別が最初、名前が 2 番目、年齢が 3 番目になるようにサブパターン配列キーを並べ替えることは可能ですか?

また、数値キーと値を取得して、関連付けられたキーと値を保持することは可能ですか?

Array
(
    [categoryOne] => Array
        (
            [0] => Array
                (
                    [0] => Dave | 12 | M
                    [Name] => David 
                    [1] => David 
                    [Age] => 12
                    [2] => 12
                    [Gender] => M
                    [3] => M
                )

            [1] => Array
                (
                    [0] => Lisa | 44 | F
                    [Name] => Lisa 
                    [1] => Lisa 
                    [Age] => 44
                    [2] => 44
                    [Gender] => F
                    [3] => F
                )

        )

    [categoryTwo] => Array
        (
            [0] => Array
                (
                    [0] => Ann | 32 | F
                    [Name] => Ann 
                    [1] => Ann 
                    [Age] => 32
                    [2] => 32
                    [Gender] => F
                    [3] => F
                )

        )

)
4

1 に答える 1

0

uksort()任意のソート順を実装する特定の関数を使用して、配列をキーでソートするために使用できます。

array_diff_key()数字キーは、との組み合わせで除外できますarray_filter()。おそらくループを使用する方が簡単ですが。

array_map()外側の「カテゴリ」レベルが任意の長さの場合、配列を , で 2 回調べることができます。

$categoryMatches = array(...);

$categoryMatches = array_map(function($cCategory) {
    return array_map(function($cEntry) {
        $cEntry = array_diff_key($cEntry, array_flip(array_filter(array_keys($cEntry), "is_integer")));
        $fieldSortOrder = array_flip(array('Gender', 'Name', 'Age'));
        uksort($cEntry, function($aKey, $bKey) {
            return ($fieldSortOrder[$aKey] < $fieldSortOrder[$bKey] ? -1 : ($fieldSortOrder[$aKey] > $fieldSortOrder[$bKey] ? 1 : 0));
        });
        return $cEntry;
    }, $cCategory);
}, $categoryMatches);

上記はテストされていませんが、大まかなアイデアを提供する必要があります。

于 2012-10-25T21:46:39.340 に答える