检查数组中是否存在多个变量之一

时间:2017-10-06 15:47:11

标签: php

$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'); } 值并结束该过程。

2 个答案:

答案 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,您就不会注意到任何差异,并且代码更具可读性。