【发布时间】:2013-09-30 05:04:58
【问题描述】:
我有以下数组
$records = array(
array("postId"=>"1","grid"=>"6"),
array("postId"=>"2","grid"=>"3"),
array("postId"=>"3","grid"=>"6"),
array("postId"=>"4","grid"=>"3"),
array("postId"=>"5","grid"=>"3"),
array("postId"=>"6","grid"=>"12"),
array("postId"=>"7","grid"=>"3"),
);
我想以任意数量的背靠背“网格”之和等于 12 的方式对这个数组进行排序。
示例:上述数组中“grids”的值为:6,3,6,3,3,12,3
(6+6=12), (3+3+3+3=12),(12=12) 所以新订单应该是6,6,3,3,3,3,12 or 3,3,3,3,12,6,6 or 6,3,3,6,3,3,12
所以在对数组进行排序后,新数组应该如下所示:
$records=array(
array("postId"=>"1","grid"=>"6"),
array("postId"=>"3","grid"=>"6"),
array("postId"=>"2","grid"=>"3"),
array("postId"=>"4","grid"=>"3"),
array("postId"=>"5","grid"=>"3"),
array("postId"=>"7","grid"=>"3"),
array("postId"=>"6","grid"=>"12"),
);
我在php手册中搜索并找到了这些函数:sort,uasort,uksort,usort,但我不知道如何使用它们。
您能告诉我如何使用 PHP 来实现吗?
更新
grid 的值将始终为 3 或 6 或 12(仅限这三个数字)
问题
$records = array(
array("postId"=>"1","grid"=>"3"),
array("postId"=>"2","grid"=>"6"),
array("postId"=>"3","grid"=>"3"),
array("postId"=>"4","grid"=>"3"),
array("postId"=>"5","grid"=>"6"),
array("postId"=>"6","grid"=>"6"),
array("postId"=>"7","grid"=>"3"),
array("postId"=>"8","grid"=>"6"),
);
【问题讨论】:
-
这没有灵丹妙药,它需要你从头开始编写一个相当广泛的函数。
-
ID 1、2、4、3、5、7、6 也可以接受吗?哪个是首选?
-
任意数量的背靠背“网格” => 那应该是什么意思?
-
您可能无法使用 php 的排序函数来执行此操作,因为这些函数假定有一种方法可以比较两个对象并确定哪个对象更大或更小。在您的示例中,您没有一个对象大于或小于另一个对象的概念。相反,您尝试根据它们的网格值加起来为 12 进行分组。
-
@WolfgangStengel ID 在这里不是问题 :) 感谢您的回复
标签: php sorting multidimensional-array