加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 15:56:20 所属栏目: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 ( [i
我有一个数组:

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.这有点难以实现(留给读者练习),但效率更高.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读