我有两个数组。我想根据他们的密钥匹配进行合并。这是我的第一个阵列
array(
(int) 1 => 'Home',
(int) 7 => 'FAQs',
(int) 16 => 'Roles',
(int) 21 => 'Terms & Condition',
(int) 24 => 'Registration',
(int) 4 => 'Posts'
)
我的第二个阵列
array(
(int) 4 => array(
(int) 0 => 'All Posts',
(int) 1 => 'Post Add'
),
(int) 7 => array(
(int) 0 => 'FAQ Add',
(int) 1 => 'All FAQs'
),
(int) 16 => array(
(int) 0 => 'Add Role',
(int) 1 => 'All Role & Actions'
),
(int) 21 => array(
(int) 0 => 'Add Terms & Condition',
(int) 1 => 'Terms & Conditions'
)
)
我想做的是,如果键匹配,用它们的值创建一个新数组这边这样合并它们可能吗?
array(
'Posts' => array(
(int) 0 => 'All Posts',
(int) 1 => 'Post Add'
),
'FAQs' => array(
(int) 0 => 'FAQ Add',
(int) 1 => 'All FAQs'
),
'Registration' => array(),
'Home'=>array(),
'Roles' => array(
(int) 0 => 'Add Role',
(int) 1 => 'All Role & Actions'
),
'Terms & Condition' => array(
(int) 0 => 'Add Terms & Condition',
(int) 1 => 'Terms & Conditions'
)
)
尝试
<?php
$new_array = array();
foreach($first_array as $key=>$value){
if(array_key_exists($key, $second_array)){
$new_aray[$value] = $arr2[$key];
}
}
print_r($new_array);
希望它能有所帮助:)
试试这个循环:
$thirdArray = array();
foreach($firstArray as $fk => $fv){
if(isset($secondArray[$fk])){
$thirdArray[$fv] = $secondArray[$fk];
}
}
var_dump($thirdArray);
如果您想使用第一个数组作为基(将所有值保持为键),可以使用array_map
和array_flip
($menus
是您的第一个数组,$submenus
是第二个数组)尝试此解决方案:
$menu = array_map
(
function( $key ) use( $submenus )
{
return (isset($submenus[$key])) ? $submenus[$key] : array();
},
array_flip( $menus )
);
$menu
阵列现在包含:
Array
(
[Home] => Array
(
)
[FAQs] => Array
(
[0] => FAQ Add
[1] => All FAQs
)
[Menu & Actions] => Array
(
)
[Roles] => Array
(
[0] => Add Role
[1] => All Role & Actions
)
[Terms & Condition] => Array
(
[0] => Add Terms & Condition
[1] => Terms & Conditions
)
[Registration] => Array
(
)
[Posts] => Array
(
[0] => All Posts
[1] => Post Add
)
)
eval.in演示
我们使用array_map
来映射翻转的$menus
数组(array_flip
反转键和值):在array_map
内部使用的匿名函数中,我们在$submenus
键中搜索给定的$menus
值(原始键):如果键存在,我们返回它,否则我们返回空数组。
- 阅读有关array_map的更多信息
- 阅读有关array_flicp的更多信息
- 阅读有关匿名函数的更多信息