脚本宝典收集整理的这篇文章主要介绍了php – 根据条件对数组进行排序,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$records = array( array("postId"=>"1","grid"=>"6"),array("postId"=>"2","grid"=>"3"),array("postId"=>"3",array("postId"=>"4",array("postId"=>"5",array("postId"=>"6","grid"=>"12"),array("postId"=>"7",);
我想对这个数组进行排序,使得任意数量的背靠背“网格”的总和等于12.
示例:上面数组中“网格”的值为:6,3,6,12,3
(6 6 = 12),(3 3 3 3 = 12),(12 = 12)因此新订单应为6,12或3,6或6,12
因此,在对数组进行排序后,新数组应如下所示:
$records=array( array("postId"=>"1",);
我在PHP手册中搜索并找到了这些函数:sort,uasort,uksort,usort但我无法弄清楚如何使用它们.
你能告诉我如何用PHP实现这个目的吗?
更新
网格的值总是3或6或12(仅限这三个数字)
问题
$records = array( array("postId"=>"1",array("postId"=>"8",);
代码说明我的概念:
//auxiliary function to calculate sum of grids in given temporary container function reduc($a) { return array_reduce($a,function ($result,$ITem) { return $result . $item['grid'] . ','; },''); } function regroup($records,$group_sum = 12) { $temp = array(); $grouPEd = array(); foreach ($records as $r) { if ($r['grid'] == $group_sum) { $grouped[] = $r; } else { if (!$temp) { $temp[] = array($r); } else { $was_grouped = false; foreach ($temp as $idx => $container) { $current_sum = sum_collection($container); if ($current_sum + $r['grid'] <= $group_sum) { $temp[$idx][] = $r; if ($current_sum + $r['grid'] == $group_sum) { $grouped = array_merge($grouped,$temp[$idx]); unset($temp[$idx]); } $was_grouped = true; break; } } if (!$was_grouped) { $temp[] = array($r); } } } } if ($temp) { //Sort descending,so Biggest ones will be filled First with smalller $rest = call_user_func_array('array_merge',$temp); usort($rest,function($a,$b) { return $b['grid'] - $a['grid']; }); $grouped = array_merge($grouped,$rest); } return $grouped; }
以上是脚本宝典为你收集整理的php – 根据条件对数组进行排序全部内容,希望文章能够帮你解决php – 根据条件对数组进行排序所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。