php – 根据条件对数组进行排序

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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",);

解决方法

所以你不是真正的排序,而是重新排序以创建序列.我想你正在尝试做一些固定高度的砖块布局,你需要重新排序以填充每一行,并将其余部分留在最后.使用12,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;
}

脚本宝典总结

以上是脚本宝典为你收集整理的php – 根据条件对数组进行排序全部内容,希望文章能够帮你解决php – 根据条件对数组进行排序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。