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.这有点难以实现(留给读者练习),但效率更高. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |