好吧,我有
$a2 = array('a'=>'Apple','b'=>'bat','c'=>'Cat','d'=>'Dog','e'=>'Eagle','f'=>'Fox','g'=>'God');
$a3 = array('b','e');
我想从$ a2减去$ a3得到:
$aNew = array('a'=>'Apple','c'=>'Cat','d'=>'Dog','f'=>'Fox','g'=>'God');
任何帮助?
答案 0 :(得分:3)
这两个内置函数可以执行类似的操作:array_diff和array_diff_assoc - 但两者都不适用于您的情况。
所以,为了做你想做的事,你必须改变你的$a3
的标记以适应这些功能(看看文档),否则你将不得不循环{{ 1}}并手动删除$a3
中的元素:
$a2
答案 1 :(得分:2)
foreach($a3 as $value){
if(isset($a2[$value]))
unset($a2[$value]);
}
答案 2 :(得分:1)
不明白。
$aNew = $a2;
foreach($a3 as $key) unset($aNew[$key]);
你需要这个吗?
答案 3 :(得分:1)
这可以通过php内置函数来完成。
由于数组$a2
包含您要删除的键的值,因此首先需要使用{{创建一个包含$a2
值的数组作为键。 1}}。然后你可以使用array_flip
。所以试试这个:
array_diff_key
请注意,您需要php> 5.1.0为此工作。
答案 4 :(得分:0)
$aNew = array();
foreach (array_diff(array_keys($a2), $a3) : $key) {
$aNew[key] = $a2[key];
}
这可以胜任。从a2中删除键,删除a3中存在的所有键,然后将剩余的键复制到新数组中。您也可以从旧阵列中删除键。这取决于你。
编辑:+ $
答案 5 :(得分:0)
这里的困难在于您将一个数组的键与另一个数组的值进行比较。例如。通过使用array_diff_ukey。 摘自PHP手册:
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}
$ array1 = array('blue'=> 1,'red'=> 2,'green'=> 3,'purple'=> 4); $ array2 = array('green'=> 5,'blue'=> 6,'yellow'=> 7,'cyan'=> 8);
var_dump(array_diff_ukey($ array1,$ array2,'key_compare_func'));
array(2){ [ “红色”] => INT(2) [ “紫色”] => INT(4) }
你的第二个数组不是关联的,所以这会将“a”与0比较,例如 所以它是:
$compareFunc = function($key) uses ($a3) {
if(array_key_exists($key, $a3) {
return true;
}
else return false;
}
array_map($compareFunc, $a2);
既不能使用,因为此函数用于修改但不减少数组。
$a4 = array();
$compareFunc = function($key) uses ($a3, &$a4) {
if(array_key_exists($key, $a3) {
array_push($a4);
}
}
可以胜任。
我想要实现的是:
使用PHP - 当标准功能不成功时为您提供回调的功能。
当回调的描述不符合您的需求时,请尝试使用绑定的概念。使用PHP的Lambda函数,您可以将对象/变量绑定到函数,
这样您就可以访问未传递给回调的变量。
发挥创意!!!
答案 6 :(得分:-2)
尝试使用array_diff 但你需要对$ a3进行一些更改。
$a3 = array('bat', 'Eagle');
//and then
$a4 = array_diff($a2, $3);
因为没有指定密钥(格式为key => value
),字符串将自动成为值。