我需要查看一个数组中的任何值是否在另一个数组中,并且数字是随机顺序的。我发现当值的顺序不完全相同时,解决方案似乎不起作用。
我已经尝试过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]]
答案 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
};
答案 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();