PHP数组按照条件排序,php – 根据条件对数组进行排序

所以你不是真正的排序,而是重新排序以创建序列.我想你正在尝试做一些固定高度的砖块布局,你需要重新排序以填充每一行,并将其余部分留在最后.使用12,6,3的给定固定变体,可以通过按降序对其进行排序来完成 – 奇数个六,它将填充较小的三个.然而,这样的顺序将产生无聊的布局 – 让它更有趣你只需要重新排序一些帖子.为此,您需要创建临时容器并在其网格总和等于12时合并它.如果您留下一些临时容器,请将它们合并为一个并在与先前分组合并之前按降序排序.

代码说明我的概念:

//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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值