【发布时间】:2021-08-06 01:56:32
【问题描述】:
我一直在寻找各种排序功能,但完全找不到我要找的东西。
这是我当前的数组结果。
0 =>
array(
'member_reference_identifier' => '001',
'user_status' => 'Hold',
'is_primary' => 'true',
),
1 =>
array(
'member_reference_identifier' => '002',
'user_status' => 'Banned',
'is_primary' => 'true',
),
2 =>
array(
'member_reference_identifier' => '003',
'user' => 'Banned',
'is_primary' => 'true',
),
3 =>
array(
'member_reference_identifier' => '004',
'user_status' => 'Active',
'is_primary' => 'false',
),
4 =>
array(
'member_reference_identifier' => '005',
'user_status' => 'Active',
'is_primary' => 'true',
),
5 =>
array(
'member_reference_identifier' => '006',
'user_status' => 'Hold',
'is_primary' => 'true',
),
6 =>
array(
'member_reference_identifier' => '007',
'user_status' => 'Banned',
'is_primary' => 'true',
),
)
我希望首先显示主要结果,并且我希望有排序顺序:活动 > 保留 > 禁止。
这是我所期待的:
4 =>
array(
'member_reference_identifier' => '005',
'user_status' => 'Active',
'is_primary' => 'true',
),
0 =>
array(
'member_reference_identifier' => '001',
'user_status' => 'Hold',
'is_primary' => 'true',
),
5 =>
array(
'member_reference_identifier' => '006',
'user_status' => 'Hold',
'is_primary' => 'true',
),
1 =>
array(
'member_reference_identifier' => '002',
'user_status' => 'Banned',
'is_primary' => 'true',
),
2 =>
array(
'member_reference_identifier' => '003',
'user_status' => 'Banned',
'is_primary' => 'true',
),
6 =>
array(
'member_reference_identifier' => '007',
'user_status' => 'Banned',
'is_primary' => 'true',
),
3 =>
array(
'member_reference_identifier' => '004',
'user_status' => 'Active',
'is_primary' => 'false',
),
)
尽管最后一个对象是活动的,但它最终还是因为 is_primary 为假。
添加更多细节以使问题更加集中:我能够确定将我的主阵列分成多个阵列的超级蛮力解决方案。将它们单独排序并再次加入它们。但是,考虑到我正在处理的大型数据集,可能是一个数组中的数百万个对象,这是一个非常昂贵的操作。我主要是在寻找最佳的东西。
【问题讨论】:
-
@biesior 在发布之前看到了这个问题。该用户(2010 年)正在寻找升序排序。我想要定制订单。
-
那么你尝试了什么?你应该告诉我们,所以我们不需要猜测,如果
usort()不满足你,你也可以迭代输入数组,将元素放入两个新数组,如if ($item['is_primary']===true){$primares[] =$item;} else {$nonPrimaries[]=$item;},最后合并这些数组得到最后一个$finalArray = array_merge($primaries, $nonPrimaries);(对不起,你应该为你的状态创建 3 个数组并合并它们,我的错,但这只是 POC) -
老实说,这是个好主意。但是在合并之前,我将不得不为 user_status 分别对这两个数组进行排序。你不觉得太贵了吗?
-
您可以先对输入数组进行排序,然后再进行拆分+重新合并,这样您就可以将其按一个索引排序并按另一个索引分组。这实际上取决于输入数组的大小,但是对于如此短的数据集,我不会关心性能。我在我的一个项目中使用了最多 100 个元素进行分组,并且没有注意到这种方法有任何性能下降。
标签: php arrays laravel sorting multidimensional-array