Well, I have
$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');
需要帮忙吗?
$a3
标记以适应这些函数(查看文档),或者你需要循环遍历 $a3
并手动从 $a2
中删除元素,像这样:foreach($a3 as $k){
unset($a2[$k]);
}
foreach($a3 as $value){
if(isset($a2[$value]))
unset($a2[$value]);
}
不懂。
$aNew = $a2;
foreach($a3 as $key) unset($aNew[$key]);
你需要这个吗?
这可以使用 PHP 内置函数完成。
由于数组 $a2
包含要删除的 键 的值,因此您需要首先使用 array_flip
创建一个包含 $a2
值作为键的数组。然后,您只需使用 array_diff_key
即可。所以请尝试以下操作:
$aNew = array_diff_key($a2, array_flip($a3));
$aNew = array();
foreach (array_diff(array_keys($a2), $a3) : $key) {
$aNew[key] = $a2[key];
}
这里的难点在于你需要将一个数组的键与另一个数组的值进行比较。例如,可以使用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) { ["red"]=> int(2) ["purple"]=> 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函数,您可以将对象/变量绑定到函数上,
以便您可以访问未传递给回调函数的变量。
发挥创造力!!!
尝试使用array_diff,但你需要对$a3进行一些更改。
$a3 = array('bat', 'Eagle');
//and then
$a4 = array_diff($a2, $3);
因为如果没有指定键(使用键=>值
的格式),该字符串将自动成为一个值。
isset
жЇ”array_key_exists
更好。 - Emmermanforeach($a3 as $value) isset($a2[$value]) && unset($a2[$value]);
但是,正如我之前所说,这是完全不必要的。 - Emmerman