在PHP中以随机顺序比较两个数组

时间:2019-04-27 02:15:11

标签: php laravel

我需要查看一个数组中的任何值是否在另一个数组中,并且数字是随机顺序的。我发现当值的顺序​​不完全相同时,解决方案似乎不起作用。

我已经尝试过array_intersect,但是如果我要查找的号码不是相同的顺序,则此方法不起作用。

$array1 = [1,2];
$array2 = [2,3];

$result = array_intersect($array1, $array2);

$result返回false,但是我希望它意识到两个数组中都存在2并返回true。

我想这有一个简单的解决方案,但是找不到任何可行的方法。

更新:

这是完整的代码(使用PHP,Laravel):

$student = User::find($id);
$studentLocations = $student->hospital()->pluck('id');
$preceptorLocations = Auth::user()->hospital()->pluck('id');

$result = array_intersect($studentLocations, $preceptorLocations);

如果返回每个结果:

[2] // studentLocations
[1,2] // preceptorLocations

但是,有了上面的完整代码,我得到了:

"array_intersect(): Argument #1 is not an array"

例如,如果我更改为array($student->hospital()->pluck('id')),则不会出现错误,也不会返回true,而当我仅返回结果时,它们是这样的:

[[2]]

6 个答案:

答案 0 :(得分:1)

要检查期望的ID是否在您的数组中:

...severity.json >> volume.csv

in_array()函数检查数组中是否存在值。 假设$ studentsLocations是一个整数。如果是数组

if(in_array($studentLocations, $preceptorLocations)){
    //Your code
}

array_diff计算数组的差值。

---更新---

您可以使用laravel intersect()方法来检查第二个集合中是否存在第一个集合的某些元素。在这种情况下,计数函数的返回值大于0。

if (!array_diff($studentLocations, $preceptorLocations)) {
    //Your code
};

Laravel 5.8 Collections Documentation

答案 1 :(得分:0)

您可能会检查您的PHP脚本,并且可能留下了一个可能给您其他错误的字符。这有效:

$array1 = [1, 12, 9, 101, 2, 22, 14];
$array2 = [2, 3, 10, 22, 14, 0];

if (is_array($array1) && is_array($array1)) {
    $result = array_intersect($array1, $array2);

    if (sizeof($result) > 0) {
        $output = "\n";
        foreach ($result as $value) {
            $output .= 'Value ' . $value . " is in both arrays.\n";
        }
        echo $output;
    } else {
        echo "Sorry! There is no result!\n";
    }

}else{
    echo "Sorry! One or both of inputs are not in array form!"
}

输出:

string(84) "
Value 2 is in both arrays.
Value 22 is in both arrays.
Value 14 is in both arrays.
"

答案 2 :(得分:0)

$array1 = [1,2];
$array2 = [2,3];

$result = array_intersect($array1, $array2);
print_r($result);

这会打印Array([1] => 2),因为密钥是用array_intersect保留的

就像您提取值一样,无需保留键就可以得到结果

$result = array_values(array_intersect($array1, $array2));
print_r($result);

这将打印Array([0] => 2)

答案 3 :(得分:0)

我的原始帖子遇到了无法解决的问题,我用基本术语进行了描述,然后给出了实际代码。

$student = User::find($id);
$studentLocations = $student->hospital()->pluck('id');
$preceptorLocations = Auth::user()->hospital()->pluck('id');

$result = array_intersect($studentLocations, $preceptorLocations);

解决方案是在Laravel中,pluck返回一个对象。通过在变量的末尾添加toArray(),它现在可以正常工作。

$student = User::find($id);
$studentLocations = $student->hospital()->pluck('id')->toArray();
$preceptorLocations = Auth::user()->hospital()->pluck('id')->toArray();

$result = array_intersect($studentLocations, $preceptorLocations);

答案 4 :(得分:0)

我想这是因为laravel给您collection,因此它不是数组,而是Collection,所以您没有得到想要的结果。 因此,首先将您的collection转换为array,然后将该数组传递给您的function 要进行转换,您可以使用集合的toArray()

$studentLocations = $student->hospital()->pluck('id')->toArray();
$preceptorLocations = Auth::user()->hospital()->pluck('id')->->toArray();

应该可以。

答案 5 :(得分:0)

通过在查询中使用whereIn(),可以完全避免使用array_intersect。

$student = User::find($id);
$studentLocations = $student->hospital()->pluck('id')->toArray();
$result = Auth::user()->hospital()->whereIn('id',$studentLocations)->pluck('id')->toArray();