晚上很晚才看到这个人。
这是按键顺序正确的数组。
Array
(
[FirstName] => 'Timmy'
[LastName] => 'O Toole'
[Address] => 'Nowhere'
[Tel] => '12345'
[Email] => 'nonone@nowhere.com'
)
我希望以下数组中的每条记录与上面的键排序相匹配。
(
[0] => Array
(
[FirstName] => 'Robin'
[Address] => 'Cave'
[LastName] => 'Mactimmy'
[Tel] => '9076'
[Email] => 'i@o.com'
)
[1] => Array
(
[Address] => 'uytr'
[FirstName] => 'Bill'
[Email] => 'j@k.com'
[LastName] => 'Gates'
[Tel] => '7654'
)
[2] => Array
(
[LastName] => 'Mahoney'
[Email] => 'y@i.ie'
[FirstName] => 'Tom'
[Tel] => '5689'
[Address] => 'kklll'
)
)
我已尝试过ksort和usort,但数组排序似乎没有更新。
答案 0 :(得分:2)
基本数据:
$array = [
0 => Array
(
'FirstName' => 'Robin',
'Address' => 'Cave',
'LastName' => 'Mactimmy',
'Tel' => '9076',
'Email' => 'i@o.com',
),
1 => Array
(
'Address' => 'uytr',
'FirstName' => 'Bill',
'Email' => 'j@k.com',
'LastName' => 'Gates',
'Tel' => '7654',
),
2 => Array
(
'LastName' => 'Mahoney',
'Email' => 'y@i.ie',
'FirstName' => 'Tom',
'Tel' => '5689',
'Address' => 'kklll',
)
];
我认为这是一个很好的解决方案:
<?php
$order = [ 'FirstName', 'LastName', 'Address', 'Tel', 'Email'];
$result = [];
foreach ($array as $sortable) {
$result[] = array_merge(array_flip($order), $sortable);
}
print_r($result);
答案 1 :(得分:2)
您可以将array_map
与array_merge
结合使用。像这样:
$result = array_map(
function ($arr) use($sample) { return array_merge($sample, $arr); },
$array
);
这里我假设$array
是对象数组,$sample
是具有正确有序键的数组。
答案 2 :(得分:1)
使用自定义密钥分拣机:
function cmp($a, $b) {
// Custom key sort
}
uksort($array, "cmp");
或使用递归ksort:
ksortRecursive(&$array, $sort_flags = SORT_REGULAR) {
if (!is_array($array)) return false;
ksort($array, $sort_flags);
foreach ($array as &$arr) {
ksortRecursive($arr, $sort_flags);
}
return true;
}
答案 3 :(得分:1)
function cmp($a, $b)
{
$order = array('FirstName' => 0, 'LastName' => 1, 'Address' => 2, 'Tel' => 3, 'Email' => 4);
if ($a == $b || !isset($order[$a]) || !isset($order[$b])) {
return 0;
}
return ($order[$a] < $order[$b]) ? -1 : 1;
}
uksort($a, "cmp");
答案 4 :(得分:1)
function customArraySort($array, $exampleArray) {
$returnArray = array();
foreach($array as $arrIndex => $arrSubArr) {
$returnArray[$arrIndex] = array();
foreach($exampleArray as $exArIndex => $value)
$returnArray[$arrIndex][$exArIndex] = $arrSubArr[$exArIndex];
}
return $returnArray;
}