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变量,它只输出数组中的第一个值。大小写有什么不同吗?也就是说,你是在比较“第一串”和“第一串”吗?你是对的。我确实需要修剪分解的值,但我需要移动我的返回False代码>foreach循环之外的声明。谢谢你,我是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));
}