【发布时间】:2018-04-16 22:53:39
【问题描述】:
我想以复杂的方式对数组进行排序,但不知道该怎么做。以下是我正在处理的数据的粗略概念:
[
{ target: random.text.cpu-pct-0, otherData[...] },
{ target: random.text.cpu-pct-1, otherData[...] },
{ target: random.text.cpu-pct-2, otherData[...] },
{ target: random.text.example-0, otherData[...] },
{ target: random.text.example-1, otherData[...] },
{ target: random.text.memory, otherData[...] },
...
]
我希望所有带有 target 且包含字符串 cpu-pct 的对象排在第一位,然后是带有 target 且包含字符串 memory 的对象,然后是 example。这个数组可以有任意数量的项目,所以按索引重新排序是行不通的。可能有 1 个带有 target 的对象,其中包括 cpu-pct,或者可能有 50 多个。我排序的其他字符串也是如此。
我考虑循环遍历原始数组,检查是否存在所需的字符串,将匹配的对象保存到我正在寻找的每个目标的新数组中,然后在最后合并数组。我认为这可行,但我想有一个更好、更有效的解决方案,可能使用usort,但我不知所措。有什么想法吗?
【问题讨论】:
-
那么这个
cpu-pct-0应该出现在这个cpu-pct-1之前吗?target是否总是包含cpu-pct、memery或example之一? -
使用php.net/manual/en/function.usort.php 创建自定义排序比较函数您可以在一个函数中轻松定义规则。在比较两个项目时,此函数应返回
-1、0或1作为其响应。该页面中的示例将有所帮助。先试试这个,然后随意发布第二个问题,其中包含您的代码尝试示例。 -
@fubar 是的,
cpu-pct-0应该先出现,然后按照最后的数字升序排列。忘了提,但也会有一个cpu-pct-avg,它应该出现在其他cpu-pct值之后