首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查字符串是否包含数组的值之一

检查字符串是否包含数组的值之一
EN

Stack Overflow用户
提问于 2016-02-25 00:24:24
回答 3查看 68关注 0票数 1

我有一个数组

代码语言:javascript
复制
$device_name = ["Xperia Z Ultra", "Xbox One", "Withing", "Win 7", "Surface Pro 4", "Surface Book", "Surface 3", "Play Station 4", "One Plus 2", "Nokia Lumia", "No Img", "Nexus 6p", "Nest", "Moto X", "Mac Pro", "Mac Book", "Mac Book Air", "Lg G4", "Laptop", "Iphone 6", "Iphone 6 S", "Iphone 6 S Plus", "Iphone 6 Plus", "Iphone 5s", "Iphone 5", "Iphone 4", "Ipad", "Ipad Pro", "Hue", "Htc One M9", "Hp Laptop", "Galaxy S6", "Galaxy S6 Edge", "Galaxy S5", "Galaxy Note 5", "Galaxy Note 4", "Galaxy Note 3", "Galaxy Note 2", "Chromecast", "Chrome Book", "Blackberry Z30", "Blackberry Z10", "Blackberry Prev", "Blackberry Bold", "August", "Apple Watch", "Apple Tv", "Ap", "Androidtablet"]

我有一根线

代码语言:javascript
复制
$input = "John's Xperia Z Ultra"

我试过了

代码语言:javascript
复制
    //Check if containing '
    if (strpos($input, "'") !== false) {
        $pieces = explode(" ", $input); // explode into pieces
        $input = $pieces[1].' '.$pieces[2]; //link them back in

        if (in_array($input, $device_name)) {
            dd('True'); 
        }

    }

我不确定我现在所拥有的是否是实现我想要的结果的最好方法。

我对任何建议或更好的方式都持开放态度。

EN

回答 3

Stack Overflow用户

发布于 2016-02-25 00:29:55

代码语言:javascript
复制
$devices = ["Xperia Z Ultra", "Xbox One", "Withing", "Win 7", "Surface Pro 4", "Surface Book", "Surface 3", "Play Station 4", "One Plus 2", "Nokia Lumia", "No Img", "Nexus 6p", "Nest", "Moto X", "Mac Pro", "Mac Book", "Mac Book Air", "Lg G4", "Laptop", "Iphone 6", "Iphone 6 S", "Iphone 6 S Plus", "Iphone 6 Plus", "Iphone 5s", "Iphone 5", "Iphone 4", "Ipad", "Ipad Pro", "Hue", "Htc One M9", "Hp Laptop", "Galaxy S6", "Galaxy S6 Edge", "Galaxy S5", "Galaxy Note 5", "Galaxy Note 4", "Galaxy Note 3", "Galaxy Note 2", "Chromecast", "Chrome Book", "Blackberry Z30", "Blackberry Z10", "Blackberry Prev", "Blackberry Bold", "August", "Apple Watch", "Apple Tv", "Ap", "Androidtablet"];

$input = "John's Xperia Z Ultra";

$stringContainsDevice = count(array_filter($devices, function($device) use ($input) {
    return stripos($input, $device) !== false;
})) !== 0;

所以基本上你过滤数组中包含在字符串中的项(我不区分大小写,但如果你想区分大小写,只需将stripos改为strpos),然后查看过滤后的数组是否包含任何项。

票数 5
EN

Stack Overflow用户

发布于 2016-02-25 01:35:55

一个更简单的解决方案是

代码语言:javascript
复制
 $contain = 0 ;
 foreach($device_name as $value){
     if(strpos($input, $value)) $contain = 1;
 }

如果输入包含数组的一个值,则contain为1,否则为0

票数 1
EN

Stack Overflow用户

发布于 2017-08-03 12:43:57

其他答案对$device_name array的每一次迭代都进行函数调用。两家公司都没有提供提前退出选项(break)。

取而代之的是,我将改进您的in_array()进程,并向您展示一个一行程序,它避免了条件,并且只会进行3次函数调用。

代码语言:javascript
复制
$device_name = ["Xperia Z Ultra", "Xbox One", "Withing", "Win 7", "Surface Pro 4", "Surface Book", "Surface 3", "Play Station 4", "One Plus 2", "Nokia Lumia", "No Img", "Nexus 6p", "Nest", "Moto X", "Mac Pro", "Mac Book", "Mac Book Air", "Lg G4", "Laptop", "Iphone 6", "Iphone 6 S", "Iphone 6 S Plus", "Iphone 6 Plus", "Iphone 5s", "Iphone 5", "Iphone 4", "Ipad", "Ipad Pro", "Hue", "Htc One M9", "Hp Laptop", "Galaxy S6", "Galaxy S6 Edge", "Galaxy S5", "Galaxy Note 5", "Galaxy Note 4", "Galaxy Note 3", "Galaxy Note 2", "Chromecast", "Chrome Book", "Blackberry Z30", "Blackberry Z10", "Blackberry Prev", "Blackberry Bold", "August", "Apple Watch", "Apple Tv", "Ap", "Androidtablet"];

$input = "John's Xperia Z Ultra";

var_export(in_array(array_slice(explode("'s ",$input,2),-1)[0],$device_name));  // true

下面是它的工作原理:

首先,在element.

  • Second,上分解字符串(单引号,s,空格),将元素数量限制为2,即如果找到's,则有2个元素,如果没有,则有1个,删除explode()生成的最后一个元素。这可以使用end()完成,但不能在同一行中完成--您需要声明一个新的变量来处理这些数据。element.

  • Third的第二个参数(array_slice()) (-1)表示提取最后一个variable.

  • Finally,,通过访问零索引元素来拉取分片元素(转换为字符串)。这可以使用current()完成,但同样,您需要声明一个新的in_array()调用。

这是一个demo that runs three different input cases

附注:你原来的方法很好,只需要限制explode()即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35607528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档