php - 如何按值比较对数值数组进行排序并更改数组索引的位置
问题描述
我需要在某些条件下对数组进行排序。
Array
(
[0] => Array
(
[entity_id] => 10
[product_id] => 424
[city] => 18
[sort_order] => 10
[deal_type_id] => dow
[deal_from_date] => 2010-12-18
[deal_to_date] => 2026-02-19
)
[1] => Array
(
[entity_id] => 11
[product_id] => 423
[city] => 18
[sort_order] => 11
[deal_type_id] => dow
[deal_from_date] => 2010-12-18
[deal_to_date] => 2027-02-19
)
[2] => Array
(
[entity_id] => 12
[product_id] => 422
[city] => 18
[sort_order] => 12
[deal_type_id] => dow
[deal_from_date] => 2011-12-18
[deal_to_date] => 2030-01-19
)
[3] => Array
(
[entity_id] => 13
[product_id] => 420
[city] => 18
[sort_order] => 13
[deal_type_id] => dow
[deal_from_date] => 2011-12-18
[deal_to_date] => 2030-01-19
)
[4] => Array
(
[entity_id] => 1
[product_id] => 463
[city] => 18
[sort_order] => 1
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2025-01-19
)
[5] => Array
(
[entity_id] => 2
[product_id] => 452
[city] => 18
[sort_order] => 2
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2026-01-19
)
[6] => Array
(
[entity_id] => 3
[product_id] => 448
[city] => 18
[sort_order] => 3
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2027-01-19
)
[7] => Array
(
[entity_id] => 4
[product_id] => 441
[city] => 18
[sort_order] => 4
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2024-01-19
)
[8] => Array
(
[entity_id] => 5
[product_id] => 440
[city] => 18
[sort_order] => 5
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2027-01-19
)
[9] => Array
(
[entity_id] => 6
[product_id] => 439
[city] => 18
[sort_order] => 6
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2028-01-19
)
[10] => Array
(
[entity_id] => 7
[product_id] => 433
[city] => 18
[sort_order] => 7
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2013-01-19
)
[11] => Array
(
[entity_id] => 8
[product_id] => 427
[city] => 18
[sort_order] => 8
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2022-01-19
)
[12] => Array
(
[entity_id] => 9
[product_id] => 425
[city] => 18
[sort_order] => 9
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2025-02-19
)
)
我需要比较 deal_from_date 从上一个键到下一个键。如果两者相同,我需要检查 deal_to_date 中的更大值。如果我发现两个 deal_to_date 值是不同的,那么首先按照更大的排序。
我试过。
for($i=0;$i<count($result);$i++)
{
if(array_key_exists($i+1, $result))
{
if(strtotime($result[$i]['deal_from_date']) == strtotime($result[$i+1]['deal_from_date']))
{
echo $i;
if(strtotime($result[$i]['deal_to_date']) < strtotime($result[$i+1]['deal_to_date']))
{
$firstArray = $result[$i];
unset($result[$i]);
$secondArray = $result[$i+1];
unset($result[$i]);
$result[$i] = $secondArray;
$result[$i+1] = $firstArray;
}
}
}
}
我需要这个输出。
Array
(
[0] => Array
(
[entity_id] => 11
[product_id] => 423
[city] => 18
[sort_order] => 11
[deal_type_id] => dow
[deal_from_date] => 2010-12-18
[deal_to_date] => 2027-02-19
)
[1] => Array
(
[entity_id] => 10
[product_id] => 424
[city] => 18
[sort_order] => 10
[deal_type_id] => dow
[deal_from_date] => 2010-12-18
[deal_to_date] => 2026-02-19
)
[1] => Array
(
[entity_id] => 12
[product_id] => 422
[city] => 18
[sort_order] => 12
[deal_type_id] => dow
[deal_from_date] => 2011-12-18
[deal_to_date] => 2030-01-19
)
[2] => Array
(
[entity_id] => 13
[product_id] => 420
[city] => 18
[sort_order] => 13
[deal_type_id] => dow
[deal_from_date] => 2011-12-18
[deal_to_date] => 2030-01-19
)
[3] => Array
(
[entity_id] => 2
[product_id] => 452
[city] => 18
[sort_order] => 2
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2026-01-19
)
[4] => Array
(
[entity_id] => 1
[product_id] => 463
[city] => 18
[sort_order] => 1
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2025-01-19
)
[5] => Array
(
[entity_id] => 3
[product_id] => 448
[city] => 18
[sort_order] => 3
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2027-01-19
)
[6] => Array
(
[entity_id] => 6
[product_id] => 439
[city] => 18
[sort_order] => 6
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2028-01-19
)
[7] => Array
(
[entity_id] => 5
[product_id] => 440
[city] => 18
[sort_order] => 5
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2027-01-19
)
[8] => Array
(
[entity_id] => 9
[product_id] => 425
[city] => 18
[sort_order] => 9
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2025-02-19
)
[9] => Array
(
[entity_id] => 4
[product_id] => 441
[city] => 18
[sort_order] => 4
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2024-01-19
)
[10] => Array
(
[entity_id] => 8
[product_id] => 427
[city] => 18
[sort_order] => 8
[deal_type_id] => dod
[deal_from_date] => 2013-12-18
[deal_to_date] => 2022-01-19
)
[11] => Array
(
[entity_id] => 7
[product_id] => 433
[city] => 18
[sort_order] => 7
[deal_type_id] => dom
[deal_from_date] => 2013-12-18
[deal_to_date] => 2013-01-19
)
)
如果从日期开始的多笔交易是同一日期,我需要对数组进行排序。然后根据 deal_to_date desc 排序。仅适用于同一组。
解决方案
只需使用usort()
这样的功能:
function sorter($a,$b){return $a["deal_from_date"]<=>$b["deal_from_date"]}
usort($array,sorter)
我希望这会对你有所帮助!
推荐阅读
- javascript - 如何创建滚动后继续缓和的基于滚动的视差动画
- python - 如何检索产品最后一次加入我的商店库存数据的日期?
- sql-server - 将 SSMS 连接到 SQL Server
- python - 当您在 python 脚本中看到“from ab import c”时,a、b、c 的类型?
- matlab - 为什么在MATLAB中绘制gridlayout时“忙”的时间很长
- sqlite - 试图从 sqlite 数据库中计算相似的用户
- django - django分页错误:AttributeError:'WSGIRequest'对象没有属性'Get'
- c# - Xamarin:OpenGL 视频编码锁定了 46000 个优秀的 GREF。执行完整的 GC
- android - 我尝试在 Kotlin、Android 中将图像从适配器传递到其他活动,但它没有显示。我应该怎么办?
- javascript - 如何对 Axios 响应进行排序?