我有一个看起来像这样的对象:
var_dump($registerObject)
的输出:
{#822 ▼
+"Sleutel": 1
+"Gebouw_ID": "20250043814"
+"Toestel_ID": "BE071 (S035)"
...
+"date": "2019-03-22 08:52:39"
+"status": 1
+"done": 0
}
我需要重新排列此对象以匹配此数组顺序:
$order = [
0 => 'object_id',
1 => 'Code MCS',
2 => 'DeviceType',
...
29 => '',
30 => 'Opmerkingen',
31 => 'OPMonderhoud',
];
这是我尝试过的;
我将对象转换为数组,而不是在数组上使用uksort并使用order数组,然后将其与array_search组合以对数组进行排序。
我想我很近,但是我不确定出什么问题了。
$registerArray = (array) $registerObject;
uksort($registerArray, function ($a, $b) use ($order) {
return array_search($a, $order) > array_search($b, $order);
});
这以奇怪的顺序返回:
array:28 [▼
"done" => 0
"Voedingskast" => ""
"status" => 1
...
"action" => "create"
"sleutel" => 1
"OPMonderhoud" => ""
]
我也尝试过只用没有键的值来处理$ order数组,它给出相同的结果。
答案 0 :(得分:0)
这是因为$order
中不存在某些键,因此会将false
与整数进行比较。
这将产生预期的结果:
uksort($registerArray, function ($a, $b) use ($order) {
$ai = array_search($a, $order);
$bi = array_search($b, $order);
return ($ai === false ? INF : $ai) > ($bi === false ? INF : $bi);
});
每个评论的更新:
如果需要空白点,则它不再是关联数组,不能具有多个相同的键;必须是数字。
$newArray = array();
foreach ($order as $k) {
if (array_key_exists($k, $registerArray)) {
$newArray[] = $registerArray[$k];
} else {
$newArray[] = '';
}
}