php – 将特定数组项移动到数组的开头而不改变其余的顺序

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 将特定数组项移动到数组的开头而不改变其余的顺序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数组:

Array
(
    [PRoduct1] => Array
    (
        [id] => 1
        [tITle] => 'p1'
        [extra] => Array(
            [date] => '1990-02-04 16:40:26'
        )
    )

    [product2] => Array
    (
        [id] => 2
        [title] => 'p2'
        [extra] => Array(
            [date] => '1980-01-04 16:40:26'
        )
    )
    [product3] => Array
    (
        [id] => 3
        [title] => 'P3'
        [extra] => Array(
            [date] => '2000-01-04 16:40:26'
        )
    )
    [product4] => Array
    (
        [id] => 4
        [title] => 'p4'
        [extra] => Array(
            [date] => '1995-01-04 16:40:26'
        )
    )
    [product5] => Array
    (
        [id] => 5
        [title] => 'p5'
        [extra] => Array(
            [date] => '1960-01-04 16:40:26'
        )
    )
    ...

我需要获得具有最新日期的2个产品并将它们移动到阵列的开头.

我已经查看了multisort函数,我可以像这样排序数组,但是整个数组将按日期排列,我想保持数组的顺序,但只是提升最新的2行.

我需要从数组中选出最新的2个(按日期排序),然后将它们移到数组的开头.所以id的顺序应该是:

3,4,1,2,5

最新的2已被移动到数组的前面,其余的仍按id排序.

解决方法

不是最优化的实现,但最直接的:

$array = /* your data */;

$latest = $array;
uasort($latest,function (array $a,array $b) {
    return strtotime($a['extra']['date']) - strtotime($b['extra']['date']);
});
array_splice($latest,2);

$latestOnTop = array_merge($latest,array_diff_key($array,$latest));

array_splice操作要求您的数组键实际上是product1或类似的;将无法使用数字索引,因为它们将重新编号.如果是这种情况,请使用另一种截断机制.

如果您的阵列非常大,那么完整的排序将会非常缓慢.在这种情况下,您应该循环遍历数组一次,跟踪您可以找到的两个最新项(及其键),然后是array_diff_key和array_merge.这有点难以实现(留给读者练习),但效率更高.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 将特定数组项移动到数组的开头而不改变其余的顺序全部内容,希望文章能够帮你解决php – 将特定数组项移动到数组的开头而不改变其余的顺序所遇到的问题。

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

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