数组marge(PHP)的优化解决方案

时间:2018-08-07 19:01:18

标签: php arrays optimization

我有两个关联数组

第一个数组:

$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'
    ]
];

我正在使用循环来执行此操作,但是它们是否是最佳解决方案?或针对大型数据集上的此类工作的最佳解决方案是什么?

1 个答案:

答案 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';
}

如果您在其他地方需要此数据,那么请事先进行此操作并设置一个新数组将返回相同的结果。