PHP - array_diff比较和删除所有类似的值

时间:2017-06-04 13:56:03

标签: php arrays

我会感激一点帮助。我尝试了array_diff(),交叉组合,但无法获得我预期的回报。

以下是我想要做的一个例子。

第一个数组。

Array
(
    [0] => 21
    [1] => 2
    [2] => 1
    [3] => 2
)

第二个数组

Array
(
    [0] => 21
    [1] => 2
)

使用array_diff(firstarray, secondarray)我得到以下内容。

Array
(
    [2] => 1
)

但我想要的是什么

Array
(
    [2] => 1
    [3] => 2
)
来自firstarray和secondarray的键不一定相同。

4 个答案:

答案 0 :(得分:0)

这个小片段可以帮助您实现您想要的效果。这里我们循环第二个数组,并从第一个数组中删除它找到的每个值的第一个匹配项。

$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

Live demo

答案 1 :(得分:0)

function array_true_diff($arrayOne, $arrayTwo = []) {
    if (count($arrayOne) < count($arrayTwo)) {
        $tmp = $arrayOne;
        $arrayOne = $arrayTwo;
        $arrayTwo = $tmp;
    }

    $diffs = [];
    foreach ($arrayOne as $key => $value) {
         if (!isset($arrayTwo[$key]) || $arrayTwo[$key] !== $value)  {
            $diffs[$key] = $value;
         }
     }
    return $diffs;
}

print_r(array_true_diff(firstarray, secondarray))

以上功能可以满足您的要求。

答案 2 :(得分:0)

在这种情况下,您可以使用“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]);
        }
    }

,输出结果为:

Array ( [0] => 1 [1] => 2 )

答案 3 :(得分:0)

尝试以下功能:

<servlet>
<servlet-name>NAME</servlet-name>
<servlet-class>MyClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>NAME</servlet-name>
<url-pattern>/xx/*</url-pattern>
</servlet-mapping>