PHP,合并两个数组

时间:2018-09-18 09:22:35

标签: php arrays sorting

我有两个数组。 第一个$letters很简单:

[5, 89, 1, 212]

第二个$some_data

[
 89 => 'A',
 41 => 'B',
 1  => 'C',
 5  => 'D',
 200 => 'E',
 212 => 'F'
]

如何合并这些数组以获得:

[
89 => 'A',
1  => 'C',
5  => 'D',
212 => 'F'
]

我已经尝试过

foreach($some_data as $id => $title) {
        if (array_key_exists($id, $letters)) {
            $some_arr[$id] = $title;
        }
    }

但是由于某种原因,它无法正常工作,并且$some_arr被复制。填充$some_arr的函数在循环内调用,并接受一个参数。使用此参数,我填充了数组$letters。每次(通常是6次)数组$letter都不同

$some_arr在使用这种方式填充时没有被复制:

foreach($cont_cntrs as $cntr_id) {
        $cntrs_byletter[$cntr_id] = $countries[$cntr_id];
    }

但是它没有按照$countries id的顺序进行排序

3 个答案:

答案 0 :(得分:2)

您只想保留$letters数组中存在的所有条目。因此,请使用array intersection

$some_arr = array_intersect_key($some_data, array_flip($letters));

答案 1 :(得分:0)

您可以在array_key_exits上使用“ in_array”功能,

将值与另一个数组进行比较时。

$some_arr = [];
foreach($some_data as $id => $title) {
  if (in_array($id, $letters)) {
      $some_arr[$id] = $title;
    }
}

答案 2 :(得分:0)

$letters数组上循环,然后使用array_key_exists函数检查键值对是否存在。如果存在,则将新数组中的键值对分配为:

    $some_arr = [];
    foreach($letters as $value) {
            if (array_key_exists($value, $some_data)) {
                $some_arr[$value] = $some_data[$value];
            }
        }
asort($some_arr);//sort associative arrays in ascending order, according to the value

预期输出:

    Array
(
    [89] => A
    [1] => C
    [5] => D
    [212] => F
)