我有一个数组
$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"我试过了
//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');
}
}我不确定我现在所拥有的是否是实现我想要的结果的最好方法。
我对任何建议或更好的方式都持开放态度。
发布于 2016-02-25 00:29:55
$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),然后查看过滤后的数组是否包含任何项。
发布于 2016-02-25 01:35:55
一个更简单的解决方案是
$contain = 0 ;
foreach($device_name as $value){
if(strpos($input, $value)) $contain = 1;
}如果输入包含数组的一个值,则contain为1,否则为0
发布于 2017-08-03 12:43:57
其他答案对$device_name array的每一次迭代都进行函数调用。两家公司都没有提供提前退出选项(break)。
取而代之的是,我将改进您的in_array()进程,并向您展示一个一行程序,它避免了条件,并且只会进行3次函数调用。
$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.
's,则有2个元素,如果没有,则有1个,删除explode()生成的最后一个元素。这可以使用end()完成,但不能在同一行中完成--您需要声明一个新的变量来处理这些数据。element.
array_slice()) (-1)表示提取最后一个variable.
current()完成,但同样,您需要声明一个新的in_array()调用。这是一个demo that runs three different input cases。
附注:你原来的方法很好,只需要限制explode()即可。
https://stackoverflow.com/questions/35607528
复制相似问题