代码之家  ›  专栏  ›  技术社区  ›  Arvin Jason Cabrera

在php中,比较两个数组并回显相同数组内容的值的最佳方法是什么?

  •  1
  • Arvin Jason Cabrera  · 技术社区  · 5 年前

    我试图比较菜单中的两个数组。我将默认数组设置为acl菜单,并为用户访问菜单创建数组。所以我基本上是在比较默认菜单数组[array 1]和用户指定的菜单数组[array 2]。现在我只想在两个数组中显示同一个对象。

    我在第一排

     $this->data['menus'] = array(
                '1' => array(
                    'Dashboard' => '/LMS/Dashboard',
                ),
                '2' => array(
                    'Notifications' => '/LMS/Notifications',
                ),
                '3' => array(
                    'Clients' => '/LMS/Clients',
                ),
                '4' => array(
                    'Penalties' => '/LMS/Penalties',
                ),
                '5' => array(
                    'Payments' => '/LMS/Payments',
                ),
                '6' => array(
                    'Profit' => '/LMS/Profit',
                ),
                '7' => array(
                    'Income' => '/LMS/Income',
                ),
                '8' => array(
                    'Outcome' => '/LMS/Outcome',
                ),
                '9' => array(
                    'Accounts' => '/LMS/Accounts',
                )
            );

    在阵列2中

    Array ( [pages_id] => 
    		Array ( 
    			[0] => 1 
    			[1] => 2 
    			[2] => 3 
    			[3] => 4 
    			[4] => 8 
    			[5] => 9 
    		      )
    	 ) 1

    如果你能看到数字1-9。这基本上就是我想比较的。

    默认情况下,我是通过以下代码输出的

    foreach($menus as $key => $val) {
            foreach($val as $k => $v) {
                ?>
                 <li class="nav-item <?=$active?>">
                   <a class=" nav-link <?=$active?> " href="<?=$v?>"> 
                     <?=$icon?><?=$k?>
                   </a>
                 </li>
                <?php
              }
           }

    把所有的菜单都显示出来很好。但我想要的是只显示用户可以访问的内容,这就是我尝试将菜单数组与数组2进行比较的原因。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Nick SamSmith1986    5 年前

    你可以用 array_intersect_key 在菜单数组和翻转(使值成为键)访问数组上:

    $pages = array_intersect_key($menus, array_flip($access['pages_id']));
    

    然后可以在 $pages 变量的方式与当前在 $menus 阵列。

    Demo on 3v4l.org

        2
  •  1
  •   Roy    5 年前

    我想用

    1. 数组相交
    2. 阵列差异
    推荐文章