PHP-array_diff比较并删除所有类似的值
如果能给我一点帮助,我将不胜感激。我尝试了PHP-array_diff比较并删除所有类似的值,php,arrays,Php,Arrays,如果能给我一点帮助,我将不胜感激。我尝试了array_diff(),intersect组合,但未能获得预期的回报 下面是我想做的一个例子 第一个数组 Array ( [0] => 21 [1] => 2 [2] => 1 [3] => 2 ) 第二阵列 Array ( [0] => 21 [1] => 2 ) 使用array\u diff(firstarray,secondarray) Array (
array_diff()
,intersect组合,但未能获得预期的回报
下面是我想做的一个例子
第一个数组
Array
(
[0] => 21
[1] => 2
[2] => 1
[3] => 2
)
第二阵列
Array
(
[0] => 21
[1] => 2
)
使用array\u diff(firstarray,secondarray)
Array
(
[2] => 1
)
但我想要什么
Array
(
[2] => 1
[3] => 2
)
来自firstarray和secondarray的密钥不一定相同。这个小片段应该可以帮助您实现您想要的。这里我们将循环第二个数组,并从第一个数组中删除它找到的每个值的第一个匹配项
$first = array(0 => 21, 1 => 2, 2 => 1, 3 => 2);
$second = array(0 => 21, 1 => 2);
foreach ($second as $v) {
unset($first[array_search($v, $first)]);
}
循环后从$first
输出:
Array
(
[2] => 1
[3] => 2
)
如果希望保持$first
数组的完整性,请将其复制到另一个变量中,并循环该变量,即$new=$first
并从$new
而不是$first
取消设置
- 这个小片段应该可以帮助你实现你想要的。这里我们将循环第二个数组,并从第一个数组中删除它找到的每个值的第一个匹配项
$first = array(0 => 21, 1 => 2, 2 => 1, 3 => 2);
$second = array(0 => 21, 1 => 2);
foreach ($second as $v) {
unset($first[array_search($v, $first)]);
}
循环后从$first
输出:
Array
(
[2] => 1
[3] => 2
)
如果希望保持$first
数组的完整性,请将其复制到另一个变量中,并循环该变量,即$new=$first
并从$new
而不是$first
取消设置
函数数组\u true\u diff($arrayOne,$arrayTwo=[])){
if(count($arrayOne)$value){
如果(!isset($arrayTwo[$key])| |$arrayTwo[$key]!=$value){
$diff[$key]=$value;
}
}
返回$diff;
}
print\r(array\u true\u diff(firstarray,secondarray))
上述函数可以满足您的要求。函数数组\u true\u diff($arrayOne,$arrayTwo=[]){
if(count($arrayOne)$value){
如果(!isset($arrayTwo[$key])| |$arrayTwo[$key]!=$value){
$diff[$key]=$value;
}
}
返回$diff;
}
print\r(array\u true\u diff(firstarray,secondarray))
上述功能可以满足您的要求。在这种情况下,您可以使用“in_array”检查是否存在,使用“array_search”获取密钥,使用“unset”从数组中删除元素,如下所示:
$array1 = array(21, 2, 1, 2);
$array2 = array(21, 2);
$result = array();
for ($i=0; $i < count($array1) ; $i++) {
if (in_array($array1[$i], $array2)) {
unset($array2[array_search($array1[$i], $array2)]);
} else {
array_push($result,$array1[$i]);
}
}
在这种情况下,您可以使用“in_array”检查是否存在,使用“array_search”获取密钥,使用“unset”从数组中删除元素,如下所示:
$array1 = array(21, 2, 1, 2);
$array2 = array(21, 2);
$result = array();
for ($i=0; $i < count($array1) ; $i++) {
if (in_array($array1[$i], $array2)) {
unset($array2[array_search($array1[$i], $array2)]);
} else {
array_push($result,$array1[$i]);
}
}
尝试以下功能:
function arrayDiff( $a, $b ) {
$a = array_count_values($a);
$b = array_count_values($b);
$out = array();
foreach( $a as $key => $value ) {
if( isset( $b[ $key ] ) ) {
$value -= $b[ $key ];
}
$out = array_merge( $out, array_fill( 0, $value, $key ) );
}
return $out;
}
print_r( arrayDiff( $a, $b ) );
尝试以下功能:
function arrayDiff( $a, $b ) {
$a = array_count_values($a);
$b = array_count_values($b);
$out = array();
foreach( $a as $key => $value ) {
if( isset( $b[ $key ] ) ) {
$value -= $b[ $key ];
}
$out = array_merge( $out, array_fill( 0, $value, $key ) );
}
return $out;
}
print_r( arrayDiff( $a, $b ) );
你必须写你自己的函数才能做到这一点为什么你还想要2?你必须写你自己的函数才能做到这一点为什么你还想要2?