Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-使用Stripos()过滤字符串_Php_Arrays_String - Fatal编程技术网

PHP-使用Stripos()过滤字符串

PHP-使用Stripos()过滤字符串,php,arrays,string,Php,Arrays,String,我已经阅读了所有关于如何为某些针过滤字符串的线程,我认为stripos()是完成这项工作的方法,但是,当找到第一个针时,函数不会返回true,就好像它只使用数组的第二个值过滤草堆一样 示例: $String = 'IWantToSolveThisProblem!!'; $needle = array('want', 'solve'); foreach ($needle as $value) { $res = stripos($String, $value,0); if($res !==fal

我已经阅读了所有关于如何为某些针过滤字符串的线程,我认为
stripos()
是完成这项工作的方法,但是,当找到第一个针时,函数不会返回true,就好像它只使用数组的第二个值过滤草堆一样

示例:

$String = 'IWantToSolveThisProblem!!';
$needle = array('want', 'solve');

foreach ($needle as $value) {

$res = stripos($String, $value,0);
if($res !==false){

echo 'found';
}
else {
echo 'not found'; }}
在上面的示例中,输出将回显“Found”,因为这两个值都存在于我的字符串中

问题是它只使用数组的最后一个值来循环。如果第一个值出现在字符串中,而不是第二个值,它将返回false。 我不想运行多个if语句

$String = 'IWantToSolveThisProblem!!'; //you were missing this semicolon
$needle = array('want', 'solve'); //no spaces before the array (not needed, I just like nospaces :P)

foreach($needle as $value) {

$res = stripos($String, $value,0);
if($res !==false){

echo 'found';
}
else {
echo 'not found'; }}
这现在没有意义了。。。这并不是说它只是比较最后一个元素。它只是没有比较第一个。看看这个例子

现在一切都有意义了。。。从文档中:

此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关详细信息,请阅读布尔值部分。使用===运算符测试此函数的返回值

因此,将
if(stripos($haystack,$needle,0))
更改为
if(stripos($haystack,$needle,0)!==False)
修复了逻辑

你应该做:

if(stripos($value,$array[0]) !== false){ //check for the first element 
   echo "found want";
}
if(stripos($value,$array[1]) !== false){ //check for the second element
   echo "found solve";
}

我使用以下代码进行了测试:

<?php
$str = "IWantToSolveThisProblem!";
$str2 = 'IWantAnAnswer';
$needles = array('want', 'solve');

foreach ($needles as $needle){
        $res = stripos($str2, $needle, 0);
        if ($res !== false){
                echo "$needle found\n";
        }
        else {
                echo "$needle not found\n";
        }
}
echo "\n";
?>
所以这对我来说似乎很有效。。。你可以检查一下打字错误,也许

您得到的是“未找到”,因为当$value变为“solve”时,在
$String='iwantanaswer'中找不到它。

<?php
$String = 'IWantToSolveThisProblem!!';
$needle = array('want', 'solve');

foreach ($needle as $value) {

$res = stripos($String, $value,0);
if($res !==false){

echo 'found';
}
else {
echo 'not found'; }}
?>
输出: 发现


所以foreach-loop会执行几个if条件(数组中的每个元素一个)

我将您的问题解释为搜索一个函数,当给定的草堆中存在所有针时,该函数返回true,这里有一个函数正是这样做的

/**
*在干草堆中搜索所有给定的针,仅当
*他们都在场。
* 
*@param string$haystack要搜索的字符串
*@param array$要查找的针数
*@返回布尔值
*/
函数stripos_数组($haystack,数组$pines)
{
foreach($针作为$针)
{
if(stripos($haystack,$pinder)==false)返回false;
}
返回true;
}
//测试功能
$string='iwanttosolvethis problem!!';
$search=array('want','solve');
$found=stripos_数组($string,$search);
“找到了吗?”已找到“”:“未找到”,“\n”//建立
$search=array('want','cheese');
$found=stripos_数组($string,$search);
“找到了吗?”已找到“”:“未找到”,“\n”//找不到
$search=array('cheese','problem');
$found=stripos_数组($string,$search);
“找到了吗?”已找到“”:“未找到”,“\n”//找不到

如果找到任何一个指针而不是所有指针,则将此函数更改为返回true是很简单的

/**
*在干草堆中搜索任何给定的针,如果有,则返回true
*他们在场。
* 
*@param string$haystack要搜索的字符串
*@param array$要查找的针数
*@返回布尔值
*/
函数stripos_数组($haystack,数组$pines)
{
foreach($针作为$针)
{
if(stripos($haystack,$needle)!==false)返回true;
}
返回false;
}

此代码看起来很好。你确定这就是你不适用的代码吗?嗨,乔恩,是的,我想代码很好。。我试了两种不同的针,效果很好。我假设问题与指针是否包含数字字符有关。这有道理吗?@Raj,看看我的答案。你会笑自己的。你是对的,只是简单的错误。下次遇到这种情况时,去散散步:P@brbcoding当前位置你的回答没有真正增加任何内容。特别是空格部分。@Raj:那也没什么区别。在任何情况下,除非您能够提供实际上不起作用的代码,否则我们只是在浪费文字。如果我运行多个If语句,它将起作用,但我认为它不适用于多个值。
Foreach
语句不应该分别运行每个指针吗?问题是为什么循环只使用最后一个数组的值。当我使用新字符串运行上面的代码时。我收到了两个输出。“已找到”和“未找到”。因此,循环使用两个数组。您确定它没有使用数组的第一个值吗?是的,我将索引0的值与索引1进行了切换,并且它始终与最后一个值循环。您还会注意到,第三个参数已默认为0,因此您可以跳过它。但是这对OP没有帮助,因为他们已经有了
!==错误
<?php
$str = "IWantToSolveThisProblem!";
$str2 = 'IWantAnAnswer';
$needles = array('want', 'solve');

foreach ($needles as $needle){
        $res = stripos($str2, $needle, 0);
        if ($res !== false){
                echo "$needle found\n";
        }
        else {
                echo "$needle not found\n";
        }
}
echo "\n";
?>
$php testme.php

want found
solve not found
<?php
$String = 'IWantToSolveThisProblem!!';
$needle = array('want', 'solve');

foreach ($needle as $value) {

$res = stripos($String, $value,0);
if($res !==false){

echo 'found';
}
else {
echo 'not found'; }}
?>
if(stripos($String,$needle[0]) !== false){ //check for the first element 
   echo "found";
}
if(stripos($String,$needle[1]) !== false){ //check for the second element
   echo "found";
}