我试图从包含单词DEVICE的数组中过滤字符串。
当前输出:
我使用以下技术来检查数组中是否存在一个名为具有DEVICE的单词,但它会打印
未找到匹配项
即使有些字符串的单词是DEVICE。
这是我尝试过的尝试:
<?php
$output= array('football GAME', 'cricket GAME', 'computer DEVICE','mobile DEVICE');
$string = 'DEVICE';
foreach ($output as $out) {
if (strpos($string, $out) !== FALSE) {
echo "Match found";
return true;
}
}
echo "Match Not found!";
return false;
?>
必需的输出:
输出应为:
找到匹配项。
我还想显示由单词DEVICE组成的项目列表,如:
计算机设备
移动设备
这里我需要什么更正?建议受到高度赞赏。
答案 0 :(得分:2)
您已经交换了<li data-target="#main-slider" data-slide-to="0" class="active"></li>
<li data-target="#main-slider" data-slide-to="1"></li>
<li data-target="#main-slider" data-slide-to="2"></li>
中的参数。要搜索的单词是函数中的第二个参数,字符串是第一个。
strpos()
使用以下代码获取所需的输出:
int strpos (string $haystack , mixed $needle [, int $offset = 0 ])
答案 1 :(得分:2)
一种非循环的解决方法是使用preg_grep,它是数组上的正则表达式。
该模式以不区分大小写的方式搜索“ device”,并返回其中包含device的所有字符串。
$output= array('football GAME', 'cricket GAME', 'computer DEVICE','mobile DEVICE');
$string = 'DEVICE';
$devices = preg_grep("/" . $string . "/i", $output);
Var_dump($devices);
输出
array(2) {
[2]=>
string(15) "computer DEVICE"
[3]=>
string(13) "mobile DEVICE"
}
答案 2 :(得分:1)
您将strpos函数的参数的位置颠倒了。来自php.net:
int strpos (string $haystack , mixed $needle [, int $offset = 0 ])
因此,您应该将LINE 5替换为以下
if (strpos($out, $string) !== FALSE) {
答案 3 :(得分:1)
您的问题是您的strpos()
参数是向后的。 API是
int strpos(字符串$ haystack,混合$ needle [,int $ offset = 0])
关于您的其他问题...
...我还想显示由单词DEVICE组成的项目列表
您可以通过array_filter()
$string = 'DEVICE';
$filtered = array_filter($output, function($out) use ($string) {
return strpos($out, $string) !== false;
});
echo implode(PHP_EOL, $filtered);
if (count($filtered) > 0) {
echo 'Match found';
return true;
}
echo 'Match Not found!';
return false;