iT邦幫忙

0

PHP 兩個陣列比較印出資料

php
  • 分享至 

  • xImage

各位PHP的高手大大們
目前在寫PHP後台程式時候遇到一個問題
請各位高手幫忙解惑。

我現在有兩個陣列
$admin 紀錄使用者的所有權 共有三筆資料 1.2.3
=Array ( [0] => 1 [1] => 2 [2] => 3 )
$listCheck 紀錄功能列表的編號跟名稱,共有五筆資料 1.2.3.4.5
=Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5)

我希望將listcheck的資料比對所有權的資料,確認這五個功能是否這個所有權的用戶有權限,
印出結果為表單的checkbox按鈕

$listCheck    功能權限
1             Yes
2             Yes
3             Yes
4             No
5             No

然後我寫foreach去搜尋兩個陣列得值在作比較時候會發生顯示的資料是15筆,
因為雙迴圈5*3=15 印出的是15筆資料,但我希望印出的結果是只有五筆,
且這五筆資料會顯示0.1 是否有權限。

foreach($listCheck as $listCheckKey)
{
 forach($admin as $adminKey)
 {
  if($listCheckKey==$adminKey)
  {
   echo "此功能有權限";
  }
  else 
  {
   echo "此功能沒有權限"; 
  }
 }

}

請問這樣的情況下要怎麼寫判斷會比較好呢?

Albert iT邦高手 1 級 ‧ 2016-10-31 17:09:35 檢舉
這種固定權限管理
無法適應
動態權限設計管理
依據單據內容類別給予不同權限
講再多的廢話,也頂不上人家直接就問題發code來解決。
我目前的做法是: 會有一個admin的資料表理面存使用者的資料,一個listing資料表裡面存功能的名稱跟ID資料等,admin登入之後,會去admin資料表撈出資料 ,裡面有使用者的帳號.權限.等等,權限裡面會存的格式是[1,2,3] 代表他有三個權限,然後我在listing資料表會撈出所有的功能類別ID,在主頁面會顯示只有符合他權限1.2.3的功能頁面,4.5雖然有功能,但他因為沒權限所以不會顯示也無法使用。
所以為了要區分每個使用者所擁有的權限,才會須要把陣列皆互相比較。

比較麻煩的是如果我現在在listing新增一個功能,admin資料表中的所有user,都須要在額外在增加此功能的權限如[1,2,3,6]才行,不然他會無法使用新功能,因為沒有權限。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
weiclin
iT邦高手 4 級 ‧ 2016-10-31 15:13:12
最佳解答
<?php

$admin = [1, 2, 3];
$listCheck = [1, 2, 3, 4, 5];

foreach ($listCheck as $index => $permission) {
    if (in_array($permission, $admin)) {
        echo "[$index] $permission has permission\n";
    } else {
        echo "[$index] $permission has no permission\n";
    }
}

輸出

[0] 1 has permission
[1] 2 has permission
[2] 3 has permission
[3] 4 has no permission
[4] 5 has no permission

感謝大大的提醒
剛剛在查詢array相關函數時候,
也發現這個函數可以不用foreach就可以進行比較,
謝謝大大的幫忙。

1
wiseguy
iT邦超人 1 級 ‧ 2016-11-01 12:23:44

$result = array_map(function($e){return in_array($e, $GLOBALS['admin']);}, $listCheck);
一行解決。$result 就是你要的陣列

喔喔做法一樣XD 不過寫的好短喔直接包在函數內

我要發表回答

立即登入回答