Php 针对数组问题检查值

Php 针对数组问题检查值,php,arrays,loops,Php,Arrays,Loops,这简直要了我的命。它看起来很简单,但由于某种原因,我无法让它工作 基本上,我所拥有的是一个函数,它接受单个字符串$name作为变量,然后遍历并根据数组中的值检查该变量。如果在数组中找到变量,则返回TRUE。此函数在另一个函数(每次提交一个新的$name变量)的foreach循环中调用 我尝试了3种不同的方法来对照数组检查变量,但它从来没有正常工作过 1。)使用另一个foreach()循环 function check($name) { $commaSeparatedString = 'Firs

这简直要了我的命。它看起来很简单,但由于某种原因,我无法让它工作

基本上,我所拥有的是一个函数,它接受单个字符串
$name
作为变量,然后遍历并根据数组中的值检查该变量。如果在数组中找到变量,则返回
TRUE
。此函数在另一个函数(每次提交一个新的
$name
变量)的foreach循环中调用

我尝试了3种不同的方法来对照数组检查变量,但它从来没有正常工作过

1。)使用另一个
foreach()循环

function check($name) {

$commaSeparatedString = 'First Name, Second Name, Third Name';
$array = explode(",", $commaSeparatedString);

foreach($array as $arrayValue) {
if($arrayValue == $name) { 
return TRUE; 
}
else {
return FALSE; 
}
}
}
2。)在数组()中使用

3。)手动循环数组中的每个值并检查是否匹配

function check($name) {
$commaSeparatedString = 'First Name, Second Name, Third Name';
$array = explode(",", $commaSeparatedString);
$count = count($array);
$i = 0; 
while($i<=$count) {
  if(isset($array[$i]) && $array[$i] == $name) {
      $i++;
      echo $i;
      return TRUE;
              break;

      }
  else { 
  $i++;
  echo $i;
  return FALSE; }
}

}
check()
的所有三种变体的结果都是相同的。它为每个
$groupValue
返回
TRUE
,但
$array
的第一个值除外。因此,如果
$obj2
$name
是'First name',它将返回
TRUE
,但如果
$obj3
$name
是'Second name',则仍然返回
FALSE
。我在一个点回显了第三个变量的
$I
,值始终保持在1,因此我知道该方法存在一些错误,但我不知道为什么使用其他两种方法的结果会相同。

是否修剪了()字符串

它将在第一个字符串上工作,因为它以“first string”开头,但第二个explode()ed字符串将是“spaceSecond string”。

您不应该将

Return false;
另外,你应该把它放在整个循环之后。 还请记住,如果你想爆炸a,b,c成为[a,b,c],你必须使用

explode(", ",$str); //note the space

我认为这些技术中的任何一种都会起作用,但你只会有一些小错误

我已经修复了下面的第一个。您不希望在else子句中
返回false
。您希望在foreach循环之后使用它,但前提是每次都不匹配

function check($name) {

$commaSeparatedString = 'First Name, Second Name, Third Name';
$array = explode(",", $commaSeparatedString);

foreach($array as $arrayValue) {
    if($arrayValue == $name) { 
        return TRUE; 
    }
}
 return false;
}
in_阵列版本可能更简单。请注意,如果($val){return true;}或者{return false;}
,则没有理由使用
if($val){return false;}
,只需执行
return$val

function check($name)
{
    $csvs = 'First Name, Second Name, Third Name';
    return in_array($name, explode(', ', $csv));
    //return in_array(trim(strtoupper($name)), array_map('trim', explode(', ', strtoupper($csv))));
    //try this second way is kind of over-kill thorough, but try it if you still get false where true is expected
}

您还必须
修剪
所生成数组的字符串,或者
用空格分解(','$csv)
。否则,
数组的元素将有一个前导空格。

问题是,当您在check函数中进行分解时,某些片段会有空格,因为逗号后面有空格。

您的代码有几个问题。导致所有代码失败的一个原因是,您将
分解为
,“
,从而在字符串中留下空白。你应该在
上分解

但是第一个代码仍然是错误的:
foreach
将始终在第一次迭代时返回,因此只检查第一个元素。循环应为:

foreach ($array as $arrayValue) {
    if ($arrayValue == $name) { 
        return true; 
    }
}

return false;
这同样适用于您的上一个代码

最好的变体可能是第二个,这里有一个稍微短一点的,经过调整的变体:

function check($name) {
    $commaSeparatedString = 'First Name, Second Name, Third Name';

    return in_array($name, explode(', ', $commaSeparatedString), true));
}

我不知道trim()方法,而是使用$array上的foreach循环将其添加到check()函数中。然而,一切都没有改变。我在foreach循环中回显$trimmed变量,它只输出数组中的第一个值。大小写有什么不同吗?也就是说,你是在比较“第一串”和“第一串”吗?你是对的。我确实需要修剪分解的值,但我需要移动我的
返回Falseforeach循环之外的声明。谢谢你,我是PHP的初学者,所以我的代码很长,很冗余,可以帮助我更好地理解代码。这个解决方案奏效了!
foreach ($array as $arrayValue) {
    if ($arrayValue == $name) { 
        return true; 
    }
}

return false;
function check($name) {
    $commaSeparatedString = 'First Name, Second Name, Third Name';

    return in_array($name, explode(', ', $commaSeparatedString), true));
}