
本教程旨在详细讲解如何在php中将两个数组进行关联重组。其中一个数组包含id与对应的值(如视图数),另一个数组包含一系列对象。我们将演示如何根据视图数将对象数组重新排序,并以视图数作为新数组的键,从而实现数据的定制化展示和后续处理。
在实际开发中,我们经常需要处理来自不同源的数据,并将它们整合到一起以满足特定的业务需求。一个常见的场景是,我们有一个包含实体ID及其关联指标(例如,文章ID和其对应的浏览量)的数组,同时还有一个包含这些实体完整信息(如文章对象)的数组。我们的目标是:
具体而言,假设我们有两个PHP数组:
我们需要将 $most_seen_list 中的对象,根据其 ID 在 $views 中找到对应的视图数,然后以这个视图数作为新数组的键,并将对应的对象存储起来。
为了更好地理解问题,我们来看具体的示例数据结构:
立即学习“PHP免费学习笔记(深入)”;
$views 数组 (ID => 视图数):
$views = [
1851 => 12,
14341 => 7,
17834 => 3
];$most_seen_list 数组 (对象列表):
$most_seen_list = [
(object) [
'ID' => 17834,
'post_date' => '2021-10-20 16:01:50',
'post_date_gmt' => '2021-10-20 21:01:50'
],
(object) [
'ID' => 14341,
'post_date' => '2021-06-01 17:57:00',
'post_date_gmt' => '2021-06-01 22:57:00'
],
(object) [
'ID' => 1851,
'post_date' => '2021-02-13 18:09:00',
'post_date_gmt' => '2021-02-13 23:09:00'
]
];请注意,这里我们使用 (object) 语法来模拟 WP_Post Object 或 stdClass Object。
经过处理后,我们希望得到一个新数组,其键是 $views 中对应的视图数,值是 $most_seen_list 中匹配的对象,并且数组的顺序应与 $views 数组的遍历顺序一致。
Array
(
[12] => stdClass Object
(
[ID] => 1851
[post_date] => 2021-02-13 18:09:00
[post_date_gmt] => 2021-02-13 23:09:00
)
[7] => stdClass Object
(
[ID] => 14341
[post_date] => 2021-06-01 17:57:00
[post_date_gmt] => 2021-06-01 22:57:00
)
[3] => stdClass Object
(
[ID] => 17834
[post_date] => 2021-10-20 16:01:50
[post_date_gmt] => 2021-10-20 21:01:50
)
)我们将介绍两种实现方案:一种是直接的嵌套循环方法,另一种是针对大型数据集的优化方法。
这种方法通过遍历 $views 数组,然后在 $most_seen_list 中查找匹配的ID来构建新数组。
$newResult = [];
// 遍历 $views 数组,获取 ID 和对应的视图数
foreach ($views as $id => $viewCount) {
// 对于每个 ID,在 $most_seen_list 中查找匹配的对象
foreach ($most_seen_list as $object) {
if ($object->ID == $id) {
// 找到匹配对象后,以视图数作为键存储到新数组
$newResult[$viewCount] = $object;
break; // 找到后即可跳出内层循环,提高效率
}
}
}
print_r($newResult);代码解析:
上述基本循环法的时间复杂度为 O(N*M),其中 N 是 $views 的大小,M 是 $most_seen_list 的大小。对于小型数组,这通常不是问题。但如果 $most_seen_list 包含成千上万个对象,嵌套循环的性能会显著下降。
为了提高效率,我们可以先将 $most_seen_list 转换为一个以 ID 为键的关联数组。这样,后续查找操作的时间复杂度将从 O(M) 降至 O(1)。
$newResult = [];
// 步骤1:将 $most_seen_list 转换为以 ID 为键的关联数组
$mostSeenListById = [];
foreach ($most_seen_list as $object) {
$mostSeenListById[$object->ID] = $object;
}
// 步骤2:遍历 $views,直接通过 ID 从优化后的数组中获取对象
foreach ($views as $id => $viewCount) {
if (isset($mostSeenListById[$id])) {
$newResult[$viewCount] = $mostSeenListById[$id];
}
}
print_r($newResult);代码解析:
通过这种优化,总的时间复杂度降为 O(N + M),对于大型数据集来说,这是一个显著的性能提升。
本教程详细展示了如何根据一个关联数组的键值对来重组和重排另一个对象数组。我们探讨了两种实现方法:一种是直观的嵌套循环,适用于小型数据集;另一种是利用哈希表(关联数组)进行优化的方法,适用于大型数据集,能显著提高处理效率。通过这些技术,开发者可以灵活地处理和整合不同来源的数据,以满足复杂的业务逻辑和展示需求。理解这些数组操作技巧是PHP开发中处理数据转换和结构化任务的关键。
以上就是PHP数组重组与基于关联值重排:一个实战教程的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号