基于数组重新排序对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于数组重新排序对象相关的知识,希望对你有一定的参考价值。
我有一个看起来像这样的对象:
EDIT片段示例
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数组,它给出了相同的结果。
答案
这是因为$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[] = '';
}
}
以上是关于基于数组重新排序对象的主要内容,如果未能解决你的问题,请参考以下文章
iOS小技能:对象数组按照日期分组和排序,使用块代码实现数组排序和乱序。
如何在 Swift 3 中重新排序核心数据对象数组并重新排序它的 Int 属性
将核心数据加载到数组中,然后填充表视图,重新排序数组对象不会持久