在PHP中从数组过滤特定单词

时间:2018-07-30 04:56:43

标签: php arrays

我试图从包含单词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组成的项目列表,如:

  

计算机设备
  移动设备

这里我需要什么更正?建议受到高度赞赏。

4 个答案:

答案 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"
}

https://3v4l.org/HkQcu

答案 2 :(得分:1)

您将strpos函数的参数的位置颠倒了。来自php.net:

int strpos (string $haystack , mixed $needle [, int $offset = 0 ])

因此,您应该将LINE 5替换为以下

 if (strpos($out, $string) !== FALSE) {

[1] https://secure.php.net/manual/en/function.strpos.php

答案 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;