2016-04-14 6 views
0

Привет Я надеюсь, кто-нибудь может объяснить мне, почему я получаю ошибку:роли пользователя в ошибке массива

«Предупреждение: in_array() ожидает параметр 2 будет массив, строка, заданная»

с следующий код:

$user = wp_get_current_user(); 
    if (in_array('teacher','student', (array) $user->roles)) { 
    // 
} 

Я также пытался использовать:

$roles = array('student','teacher'); 
$user = wp_get_current_user(); 
    if (in_array($roles, (array) $user->roles)) { 
    // 
} 

Может кто-нибудь сказать мне, что Я делаю неправильно и как я могу включить в массив больше одной роли?

ответ

1

Согласно инструкции: - http://php.net/manual/en/function.in-array.php

вам необходимо предоставить первый параметр как string, второй один array, в котором вы хотите произвести поиск и третий один, который не является обязательным является type of search.

Так применить foreach(): -

$roles = array('student','teacher'); 
$user = wp_get_current_user(); 
foreach ($roles as $role){ 
    if (in_array($role, (array) $user->roles)) { 
    // do your stuff 
    } 
} 

Примечание: - это работает только тогда, когда $user->roles будет одномерный массив .

+0

Я нашел этот отзыв полезным – fairydragon

1

documentation для in_array ясно показывает вам, что он принимает только 1 иголку и 1 параметр сена.

что вам нужно сделать, это что-то вроде этого (будет много способов).

function checkForRole($roles, array $array) { 
    foreach($roles as $role) { 
     if(in_array($role, $array) { 
      return true; 
     } 
    } 

    return false; 
} 

if(checkForRole($roles, (array) $user->roles)) { 
    // do something 
} 

редактировать

просто добавить (и я не знаю, что это, так что спасибо за заставляя меня посмотреть его), in_array может использовать массив как иглы, но он ищет стог сена для полный массив, поэтому этот пример возвращает значение true:

in_array(['a','b'], [['a','b']]); // note the multidimensional array haystack 
        ^^
Смежные вопросы