我正在尝试自定义PHP的usort
函数来更改字符排序顺序。
目前,只有“*
”符号字符等于具有小于字母字符的值,例如“a
”,即"*" < "a" = TRUE
。其他符号(例如“{
”的值大于字母,例如“a
”,即"{" < "a" = FALSE
。
我想排序,因此值“{*}
”位于排序数组的顶部,就像值为“*
”一样。这是我目前正在使用的函数,用于按对象的多个属性对对象数组进行排序。 [署名:这是usort
Will Shaver's上docs代码的修改版本。]
function osort($array, $properties) {
//Cast to an array and specify ascending order for the sort if the properties aren't already
if (!is_array($properties)) $properties = [$properties => true];
//Run the usort, using an anonymous function / closures
usort($array, function($a, $b) use ($properties) {
//Loop through each specified object property to sort by
foreach ($properties as $property => $ascending) {
//If they are the same, continue to the next property
if ($a -> $property != $b -> $property) {
//Ascending order search for match
if ($ascending) {
//if a's property is greater than b, return 1, otherwise -1
return $a -> $property > $b -> $property ? 1 : -1;
}
//Descending order search for match
else {
//if b's property is greater than a's, return 1, otherwise -1
return $b -> $property > $a -> $property ? 1 : -1;
}
}
}
//Default return value (no match found)
return -1;
});
//Return the sorted array
return $array;
}
答案 0 :(得分:0)
[
{
"ID" : "some-guid-string"
"Name" : "MyOrganization",
"Members" : {
"Team1" : [
"MemberName" : "John",
"MemberName" : "Jess",
"MemberName" : "Joe",
],
"Team2" : [
"MemberName" : "Jake",
"MemberName" : "Jeff"
]
}
}
]
如何按照您定义的顺序对某些字符进行优先排序,然后使用常规usort
呢?
这样的事情:
strcmp