2016-11-30 92 views
-1

所以我有此對象:和array_diff_assoc()參數#1不是數組PHP

[ 
    { 
     "id":1, 
     "name":"create-users", 
     "display_name":"Create user", 
     "description":"Add new user" 
    }, 
    { 
     "id":2, 
     "name":"edit-user", 
     "display_name":"Edit user", 
     "description":"Edit existing user" 
    }, 
    { 
     "id":3, 
     "name":"create-post", 
     "display_name":"Create post", 
     "description":"create new post" 
    }, 
    { 
     "id":4, 
     "name":"edit-post", 
     "display_name":"Edit post", 
     "description":"edit existing post" 
    } 
] 

和該另一之一:

[ 
    { 
     "id":3, 
     "name":"create-post", 
     "display_name":"Create post", 
     "description":"create new post" 
    }, 
    { 
     "id":4, 
     "name":"edit-post", 
     "display_name":"Edit post", 
     "description":"edit existing post" 
    } 
] 

現在我通過在嵌套的foreach這兩個對象循環循環頂部比較兩個對象中的哪些數組是相等的(等於鍵和值對)。

下面是foreach循環:

foreach ($role_perms as $role_perm) { 
    foreach ($all_perms as $all_perm) { 
     if (array_diff_assoc($all_perm, $role_perm)) { 
      $all_perm['check'] = 1; 
     } 
    } 
} 

但我不知道爲什麼我不斷收到錯誤

和array_diff_assoc():參數#1不是一個數組 (上線的代碼與if語句。)

我做錯了什麼?感謝您的幫助

+1

'的var_dump($ all_perm,$ role_perm);' – Federkun

+0

你混淆 「陣列」 和 「對象」。 – arkascha

+0

@arkascha請你能澄清我這一點。前兩個我被稱爲對象,我認爲他們是包含數組的對象?那是我混淆的地方嗎? –

回答

1

array_diff_assoc()用於比較數組。而你的數據不是。

如果你想使用array_diff_assoc()修改你的數據結構,以便你有一個數組數組。例如:

$your_array = [ 
    [ 
     "id" => 3, 
     "name"=>"create-post", 
     "display_name"=>"Create post", 
     "description"=>"create new post" 
    ], 
    [ 
     "id"=>4, 
     "name"=>"edit-post", 
     "display_name"=>"Edit post", 
     "description"=>"edit existing post" 
    ] 
]; 

編輯: 作爲一種變通方法,投對象的情況下,陣列不能修改你的數據結構。

$object = new stdClass(); 
    $object->a = 'AAA'; 
    $object->b = 'BBB'; 

    var_dump((array) $object); 

輸出:

array(2) { ["a"]=> string(3) "AAA" ["b"]=> string(3) "BBB" } 

你的情況:

foreach ($role_perms as $role_perm) { 
    foreach ($all_perms as $all_perm) { 
     if (array_diff_assoc((array) $all_perm, (array) $role_perm)) { 
      $all_perm['check'] = 1; 
     } 
    } 
} 
+0

對不起,我沒有指定好。我提供的數據是由我手動編寫的,但是它的實際記錄來自數據庫。這是否意味着從數據庫返回的值不是數組類型?對不起,這可能沒有意義,因爲我是一個初學者在PHP? –

+0

如果無法修改原始數據結構,則可以在使用array_diff_assoc()之前將對象轉換爲數組。我在我的答案中添加了一個例子。 – MarcM

相關問題