2015-03-03 3 views
1

Я пытаюсь использовать array_diff для исключения определенных элементов из массива. Согласно документам: «Возвращает массив, содержащий все записи из массива1, которые не присутствуют ни в одном из других массивов».Array_diff не исключая элементы из массива

В моем коде ниже у меня есть массив, который представляет возврат данных из базы данных при запросе пользователя. У меня есть другой массив, содержащий элементы, которые я не хочу включать в массив. Вот код ...

$user = array(
    'id' => '9', 
    'password' => 'CRYPT_BLOWFISH HASH', 
    'username' => 'Billy', 
    'phone' => '+447777777777'); 

$columnsToExclude = array('password', 'phone'); 

var_dump(array_diff($user, $columnsToExclude)); 

Я не понимая, что я делаю неправильно, если я не могу использовать последовательный массив в качестве второго аргумента.

Что я делаю неправильно?

Edit:

Как было предложено в комментариях, я попытался array_diff_key и я получаю те же результаты .

array_diff_key($user, $columnsToExclude)); 
+0

'array_diff' работает над значениями и не на клавишах. – Niols

+0

Ах! ............. –

+2

Попробуйте 'array_diff_key' http://php.net/manual/en/function.array-diff-key.php – Niols

ответ

2

array_diff возвращает все значения из $user, которые не имеют соответствующие значения в $columnsToExclude. Значениями в $columnsToExclude являются «пароль» и «телефон». Ни один из этих значения есть в $user. Ожидается результат. Вы хотите сделать это диф на ключах, и вы также должны сделать «пароль» и «телефон» ключей в массиве, а не значение:

array_diff_key($users, array_flip($columnsToExclude)) 
Смежные вопросы