【发布时间】:2019-01-12 05:52:51
【问题描述】:
我有一个数组
Array
(
[0] => stdClass Object
(
[tab_option_name_selector] => 2
[fieldtype] => notes
[order] => 12
)
[1] => stdClass Object
(
[tab_option_name_selector] => 2
[fieldtype] => notes
[order] => 8
)
[2] => stdClass Object
(
[tab_option_name_selector] => 1
[order] => 2
[fieldtype] => selectbox
)
[3] => stdClass Object
(
[tab_option_name_selector] => 2
[order] => 3
[fieldtype] => selectbox
)
)
我正在尝试让这个 usort 函数工作
function osort(&$array, $props)
{
if(!is_array($props))
$props = array($props => true);
$me = usort($array, function($a, $b) use ($props) {
foreach($props as $prop => $ascending)
{
if($a->$prop != $b->$prop)
{
if($ascending)
return $a->$prop > $b->$prop ? 1 : -1;
else
return $b->$prop > $a->$prop ? 1 : -1;
}
}
return -1; //if all props equal
});
print_r($props);
return ($me);
}
$tab = osort($objectArray, "tab_option_name_selector", "order");
所以按标签排序然后排序。
$tab 是空的 - 知道我做错了什么吗?
【问题讨论】:
-
为什么额外的间接层级让事情变得更加混乱?为什么不
$sorted = usort($objectArray, "sortObjects");使用 sortObjects 根据选项卡和顺序值返回 -1/0/1? (如果标签不同,返回它们的 cmp,如果它们相同,返回命令 cmp,完成了吗?) -
嗨 @Mike'Pomax'Kamermans 很抱歉,我不明白如何按照您的建议进行操作
-
你在说什么,你的代码已经这样做了。您无需直接使用自定义比较函数在名为
osort, only have your function do the comparison, and then just callusort 的函数中进行排序。