是否可以对子模式数组键进行排序,以便将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
)
)
)
答案 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);
以上是未经测试的,但应该给出粗略的想法。