我有两个数组。
第一个$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的顺序进行排序
答案 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
)