1

是否可以对子模式数组键进行排序,以便 Gender 排在第一位,Name 排在第二位,Age 排在第三位,而不是 Name、Age、Gender

另外,是否可以使用数字键和值,而只保留关联的键和值?

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()如果外部“类别”级别是任意长度,则可以使用 , 遍历数组两次。

$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 回答