2012-10-25 55 views
1

是否有可能使性别至上子图样数组键排序,名字来源于第二,和年龄排第三位,姓名,年龄,性别的INSEAD订购一Preg_Match_All阵列子模式

此外,是否有可能获得数字键和值的乘数,并保持相关键和值?

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 
       ) 

     ) 

) 
+0

您的性别列出了您想要的排序顺序的两倍... – Orbling

+0

迭代结果列表,挑出值,分配给具有所需键顺序的新数组。这只是五行代码,没什么困难。还是你绊倒别的东西? – mario

+0

@mario那是唯一的方法然后....创建一个新的数组? – user826855

回答

0

可以使用uksort()通过键,数组进行排序与​​实施的arbitary排序顺序给定函数。

数字键可以用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); 

以上是未经测试,但应该给大概的想法。

+0

函数式编程在PHP中,哈哈。 – Orbling