Каков наилучший способ сравнить 2 массива и вывести значения одного и того же содержимого массива в php? - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь сравнить 2 массива в меню. Я установил массив по умолчанию для моего меню acl, и я делаю массив для пользователей, чтобы получить доступ к меню. Поэтому я пытаюсь сравнить массив меню по умолчанию [массив 1] с назначенным пользователем массивом меню [массив 2]. Теперь я хочу показать только один и тот же объект внутри 2-х массивов.

У меня здесь в массиве 1

 $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 ]

1 голос
/ 24 октября 2019

Вы можете использовать array_intersect_key в массиве меню и перевернутом (чтобы сделать значения ключами) массиве доступа:

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

Затем можно выполнить итерацию по $pages переменная так же, как вы сейчас выполняете итерацию по массиву $menus.

Демонстрация на 3v4l.org

1 голос
/ 24 октября 2019

Я думаю, что использую

  1. array_intersect
  2. array_diff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...