PHP删除数组值

Jer*_*Lim 2 php arrays codeigniter

我有2个阵列.

<?php
$array1 = array('id' => 1, 'email' => 'example@example.com' , 'name' => 'john' );
$array2 = array('id', 'email');
Run Code Online (Sandbox Code Playgroud)

我在编写代码时无法从array1中取消设置不是来自数组2的键值对.

这个问题与大多数示例不同,我的array2没有键值对的格式,只有键.

我如何从array1中删除未在array2中指定的东西.

我目前的代码不起作用

foreach ($array1 as $key => $value) {
if (array_search($key, $array2)===false) {
 unset($key);
}
}
Run Code Online (Sandbox Code Playgroud)

Alm*_* Do 6

使用array_diff_key()以留下是价值观不是在第二个数组:

$array1 = array('id'=>1, 'email'=> 'email' , 'name'=>'john' );
$array2 = array('id','email');

$result = array_diff_key($array1, array_flip($array2));
Run Code Online (Sandbox Code Playgroud)

或者,如果要更改第一个数组:

$array1 = array_diff_key($array1, array_flip($array2));
Run Code Online (Sandbox Code Playgroud)

编辑(误解)

使用array_intersect_key()离开该值是在第二个数组:

$array1 = array_intersect_key($array1, array_flip($array2));
Run Code Online (Sandbox Code Playgroud)

  • 需要`array_flip()`,因为你的第二个数组包含__values __,而不是__keys__.它就像`[0 =>'id',1 =>'email']`所以它的键是'0`和`1`而对于`array_diff_key()`你需要通过键传递数组来获得差异 (2认同)

AyB*_*AyB 5

你做得对,只是你的方式unset不正确:

unset($key);
Run Code Online (Sandbox Code Playgroud)

应该

unset($array1[$key]);
Run Code Online (Sandbox Code Playgroud)

演示