$array = ['a', 'b', 'c', 'd'];
$vars = ['a', 'f', 'g'];
foreach ($vars as $var) {
if (in_array($var, $array)) {
return true;
} else {
return false;
}
}
如何检查$vars
中是否存在$array
之一?如果所有其他人都true
false
这不是问题,那么其中只有一个需要true
,但如果值超过1 ['a', 'b', 'c', 'g']
,
例如true
我希望函数停在第一个 // Hash password before save
if (!empty($request->password)) {
$request->offsetSet('password', Hash::make($request->password));
}else{
$request->remove('password');
}
值并结束该过程。
答案 0 :(得分:5)
只需使用array_intersect
功能:
$arr = ['a', 'b', 'c', 'd'];
$vars = ['a', 'f', 'g'];
$result = count(array_intersect($vars, $arr)) == 1;
var_dump($result); // true
答案 1 :(得分:2)
对我来说,你在问题中得到的代码几乎是解决这个问题的最好方法。您只需将@Override
public void onBindViewHolder(E holder, int position) {
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// Do your stuff
return false;
}
});
}
移动到循环之后,以便处理所有值:
return false
这与foreach ($vars as $var) {
if (in_array($var, $array)) {
return true;
}
}
return false;
的解决方案完全相同,但其优点是只需处理最少量的循环。请考虑以下数据:
array_intersect
使用$vars = [1, 2, 3, 4, ... 1,000,000,000];
$array = [1, 10, ...];
的解决方案需要检查array_intersect
中每个元素 $vars
中的每个元素,而突破循环只需要检查直到第一场比赛。如果两个数组都非常大,可以使用两个嵌套的$array
循环来进一步优化它。
就像我在评论中提到的那样 - 如果您的数组很小,那么只需使用foreach
,您就不会注意到任何差异,并且代码更具可读性。