使用子图案订购Preg_Match_All数组

时间:2012-10-25 21:23:40

标签: php regex preg-match

是否可以对子模式数组键进行排序,以便将Gender排在第一位,Name排在第二位,Age排在第三位,名字,年龄,性别的名单

此外,是否可以获取数字键和值,并保留关联键和值?

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
                )

        )

)

1 个答案:

答案 0 :(得分: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);

以上是未经测试的,但应该给出粗略的想法。