在Laravel中获取两个数组之间的差异

5

$category变量将保存已经存在于tags表中的值(即标签),或者用户可以在此变量中输入新的标签,或两者都有。

如果标签存在于tags表中,则下面是查询这些标签的方式:

$TagNames = DB::table('tags')
                    ->whereIn('t_name', $category)                  
                    ->pluck('t_name'); 
的输出结果:
array(2) { [0]=> string(7) "Zamalek" [1]=> string(4) "Ahly" }

以下是$category变量,它将保存所有标签,无论是用户输入的新标签还是现有标签。
$category = $request->get('catBox');

$category 的输出(带有两个额外的新标签):

array(4) { [0]=> string(7) "Zamalek" [1]=> string(4) "Ahly" [2]=> string(5) "Gouna" [3]=> string(8) "Pyramids" }

问题是:如何比较两个数组,并仅获取差异(在本例中为“Gouna”和“pyramids”)存储在新数组中?
4个回答

10

如果您只需要从 $category 中检索差异。

您可以使用 PHP 内置函数array_diff()

$differenceArray = array_diff($category, $TagNames);

请注意,这不会显示$TagNames的差异。

要检索所有差异,您可以检索第一个差异和第二个差异,然后使用array_merge()函数将它们合并在一起。

$differenceArray1 = array_diff($category, $TagNames);
$differenceArray2 = array_diff($TagNames, $category);

$mergeDifference = array_merge($differenceArray1, $differenceArray2);

4
你可以使用array_diff(A,B),它返回从A中获取的所有元素,这些元素不是B的元素(= A去掉B)。
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);
?>

将数组1与数组2的差异输出,结果为:

Array
(
    [1] => blue
)

希望这能帮到你。

2
你可以使用名为array_diff的php函数,它将通过比较值返回不匹配的项。
<?php
    $array1 = array(0=> 'Language', 1=>'Math', 2=>'Science', 3=>'Geography');
    $array2 = array(0=> 'Math', 1=>'Science', 2=>'History');
    $diff_result = array_diff($array1, $array2);
    print_r($diff_result);
?>

输出:

Array ( [0] => Language [3] => Geography) 

参考资料:https://www.w3resource.com/php/function-reference/array_diff.php


0
这里是 Laravel 的方法,对于那些想坚持使用 Laravel 辅助函数而不是 array_diff 的人来说,以下是示例:
假设您有一个叫做 $activeUserIds 的集合 1 和一个叫做 $allUserIds 的集合 2,您想要查找非活跃用户的 ID... $inactiveUserIds = $activeUserIds->diff($allUserIds);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接