如果两个数组键匹配,则使用它们的值创建一个新数组


if two array key matches then create a new array with their values

我有两个数组。我想根据他们的密钥匹配进行合并。这是我的第一个阵列

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_maparray_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的更多信息
  • 阅读有关匿名函数的更多信息