【发布时间】:2015-09-18 17:47:33
【问题描述】:
我正在调用一个 REST API,它返回一个对象数组。其中一些包含更多包含对象的数组,如:
Array
(
[0] => stdClass Object
(
[OPPORTUNITY_ID] => 7443729
[CUSTOMFIELDS] => Array
(
[0] => stdClass Object
(
[CUSTOM_FIELD_ID] => OPPORTUNITY_FIELD_7
[FIELD_VALUE] => Zorem
)
[1] => stdClass Object
(
[CUSTOM_FIELD_ID] => OPPORTUNITY_FIELD_8
[FIELD_VALUE] => Zappem
)
)
)
[1] => stdClass Object
(
[OPPORTUNITY_ID] => 7401996
[CUSTOMFIELDS] => Array
(
[0] => stdClass Object
(
[CUSTOM_FIELD_ID] => OPPORTUNITY_FIELD_7
[FIELD_VALUE] => Aorem
)
[1] => stdClass Object
(
[CUSTOM_FIELD_ID] => OPPORTUNITY_FIELD_8
[FIELD_VALUE] => Arappem
)
)
)
// [etc.]
)
我想做的是根据OPPORTUNITY_ID 或CUSTOM_FIELD_ID / FIELD_VALUE 对数组中的第一级对象进行排序。
作为一种场景,用户会点击链接:“按 OPPORTUNITY_FIELD_7 排序”,数组元素 [1] 将变为 [0],因为“Aorem”的字母值高于“Zorem”。
我已经设法使用usort 对第一级对象进行排序:
function sort_results( $a, $b ) {
if ($a->OPPORTUNITY_ID == $b->OPPORTUNITY_ID) return 0;
else if ($a->OPPORTUNITY_ID > $b->OPPORTUNITY_ID) return -1;
else return 1;
}
usort( $json_opportunities, "sort_results" );
但我不知道如何首先根据 OPPORTUNITY_FIELD_7 等 2 级值进行排序。有什么建议么?我是否需要将所有内容都推入一个数组并以这种方式排序,或者有没有一种方法可以在不先重写数组的情况下进行排序?
【问题讨论】: