我有两个关联数组:
第一个数组:
$first_array = [
1 => 'Star Wars: Episode VII - The Force Awakens (2015)',
5 => 'Avatar (2009)',
7 => 'Black Panther (2018)',
10 => 'Avengers: Infinity War (2018)',
11 => 'Titanic (1997)',
18 => 'Jurassic World (2015)',
20 => 'Marvel's The Avengers (2012)',
25 => 'Star Wars: Episode VIII - The Last Jedi (2017)'
];
和第二个关联数组:
第二个数组:
$second_array = [
1 => '3 star',
5 => '5 star',
7 => '3 star',
18 => '4 star',
20 => '3 star',
25 => '4 star'
];
这是第一数组和第二数组的键是movie_id。 如何像这样合并结果数组:
$resulted_array = [
1 => [
'name' => 'Star Wars: Episode VII - The Force Awakens (2015)',
'rating'=> '3 star'
],
5 => [
'name' => 'Avatar (2009)',
'rating'=> '5 star'
],
7 => [
'name' => 'Black Panther (2018)',
'rating'=> '3 star'
],
18 => [
'name' => 'Jurassic World (2015)',
'rating'=> '4 star'
],
20 => [
'name' => 'Marvel's The Avengers (2012)',
'rating'=> '3 star'
],
25 => [
'name' => 'Star Wars: Episode VIII - The Last Jedi (2017)'
'rating'=> '4 star'
]
];
我正在使用循环来执行此操作,但是它们是否是最佳解决方案?或针对大型数据集上的此类工作的最佳解决方案是什么?
答案 0 :(得分:1)
1)创建其他两个数组时,最好创建单个数组。我知道这并非总是可能的,但是例如,如果您有两个查询,请尝试使用一个带有联接的查询(我在这里有点猜测)。
2)如果这仅仅是出于显示目的,例如您不需要保留主键,也不需要使用单词“ name”和“ rating”创建数组(您已经知道了,这是重复信息),那么这是一种相当简化的方法:
$merged = array_map(function () { return func_get_args(); }, $first_array, $second_array);
这两个数组来自您的问题。 这将输出:
array(8) {
[0] =>
array(2) {
[0] =>
string(49) "Star Wars: Episode VII - The Force Awakens (2015)"
[1] =>
string(6) "3 star"
}
[1] =>
array(2) {
[0] =>
string(13) "Avatar (2009)"
[1] =>
string(6) "5 star"
}
然后,您可以循环该数组,并且每个子数组的键都按“名称”和“评分”的顺序排列,例如:
foreach ($merged as $data) {
echo 'Name: ' . $data[0];
echo 'Rating: ' . $data[1];
}
3)仅循环数组1并在另一个数组中回显相应的匹配键。例如:
foreach ($first_array as $key => $value) {
echo 'Name: ' . $value;
echo 'Rating: ';
echo !empty($second_array[$key]) ? $second_array[$key] : 'Unknown';
}
如果您在其他地方需要此数据,那么请事先进行此操作并设置一个新数组将返回相同的结果。