2016-02-26 48 views
0

我有

一个$input =“约翰的一个加2”,和遍历一个数组,并检查值中的一个是一个字符串

一个阵列的一部分$devices

array:54 [ 
    0 => array:1 [ 
    "name" => "xperia-z-ultra" 
    ] 
    1 => array:1 [ 
    "name" => "xbox-one" 
    ] 
    2 => array:1 [ 
    "name" => "xbox-360" 
    ] 
    3 => array:1 [ 
    "name" => "withings-camera" 
    ] 
    4 => array:1 [ 
    "name" => "withing" 
    ] 
    5 => array:1 [ 
    "name" => "win-7" 
    ] 
    6 => array:1 [ 
    "name" => "surface-pro-4" 
    ] 
    7 => array:1 [ 
    "name" => "surface-book" 
    ] 
    8 => array:1 [ 
    "name" => "surface-3" 
    ] 
    9 => array:1 [ 
    "name" => "roku" 
    ] 
    10 => array:1 [ 
    "name" => "play-station-4" 
    ] 
    11 => array:1 [ 
    "name" => "one-plus-2" 
    ] 
    12 => array:1 [ 
    "name" => "nokia-lumia" 
    ] 
    13 => array:1 [ 
    "name" => "no-img" 
    ] 
    14 => array:1 [ 
    "name" => "nexus-6p" 
    ] 
    15 => array:1 [ 
    "name" => "nest" 
    ] 
    16 => array:1 [ 
    "name" => "moto-x" 
    ] 
    17 => array:1 [ 
    "name" => "macbook-pro" 
    ] 
    18 => array:1 [ 
    "name" => "mac-pro" 
    ] 
    19 => array:1 [ 
    "name" => "mac-book" 
    ] 
    20 => array:1 [ 
    "name" => "mac-book-air" 
    ] 
    21 => array:1 [ 
    "name" => "lg-g4" 
    ] 
    22 => array:1 [ 
    "name" => "laptop" 
    ] 
    23 => array:1 [ 
    "name" => "iphone-6" 
    ] 
    24 => array:1 [ 
    "name" => "iphone-6-s" 
    ] 
    25 => array:1 [ 
    "name" => "iphone-6-s-plus" 
    ] 
    26 => array:1 [ 
    "name" => "iphone-6-plus" 
    ] 
    27 => array:1 [ 
    "name" => "iphone-5s" 
    ] 
    28 => array:1 [ 
    "name" => "iphone-5" 
    ] 
    29 => array:1 [ 
    "name" => "iphone-4" 
    ] 
    30 => array:1 [ 
    "name" => "ipad" 
    ] 
    31 => array:1 [ 
    "name" => "ipad-pro" 
    ] 
    32 => array:1 [ 
    "name" => "hue" 
    ] 
    33 => array:1 [ 
    "name" => "htc-one-m9" 
    ] 
    34 => array:1 [ 
    "name" => "hp-laptop" 
    ] 
    35 => array:1 [ 
    "name" => "galaxy-s6" 
    ] 
    36 => array:1 [ 
    "name" => "galaxy-s6-edge" 
    ] 
    37 => array:1 [ 
    "name" => "galaxy-s5" 
    ] 
    38 => array:1 [ 
    "name" => "galaxy-note-5" 
    ] 
    39 => array:1 [ 
    "name" => "galaxy-note-4" 
    ] 
    40 => array:1 [ 
    "name" => "galaxy-note-3" 
    ] 
    41 => array:1 [ 
    "name" => "galaxy-note-2" 
    ] 
    42 => array:1 [ 
    "name" => "chromecast" 
    ] 
    43 => array:1 [ 
    "name" => "chrome-book" 
    ] 
    44 => array:1 [ 
    "name" => "blackberry-z30" 
    ] 
    45 => array:1 [ 
    "name" => "blackberry-z10" 
    ] 
    46 => array:1 [ 
    "name" => "blackberry-prev" 
    ] 
    47 => array:1 [ 
    "name" => "blackberry-bold" 
    ] 
    48 => array:1 [ 
    "name" => "belkin-wemo" 
    ] 
    49 => array:1 [ 
    "name" => "august" 
    ] 
    50 => array:1 [ 
    "name" => "apple-watch" 
    ] 
    51 => array:1 [ 
    "name" => "apple-tv" 
    ] 
    52 => array:1 [ 
    "name" => "androidtablet" 
    ] 
    53 => array:1 [ 
    "name" => "amazon-tv" 
    ] 
] 

我想

来循环访问我的数组,然后检查我的$input子字符串是否包含我的$devices数组的其中一个设备名称。


我试图

foreach ($devices as $i=>$device) { 
    if(stripos($input, $device['name']) !== false){ 
     dd('True'); 
    } 
    else 
     dd('False'); 

} 

False打印。尽管如此,我知道one-plus-2实际上存在于我的设备阵列中。

11 => array:1 ["name" => "one-plus-2"] 

我错过了什么吗?

任何提示/建议,将非常感谢!

+1

我在想你在使用Laravel。 'dd()'退出,所以它会在第一项之后破坏外观:'xperia-z-ultra',因为它不匹配。 – Rudie

+0

@Rudie:哦,哇。我没有那个。测试这个的正确方法是什么? ;) – ihue

+0

要清楚,你想检查任何数组键是否包含** any ** common substring?因为“约翰的一加二”!=“一加二”。通过这种逻辑,许多这些将通过,因为其中许多包含字母“o”... –

回答

0

你交换针和干草堆参数

if(stripos($device['name'], $input) !== false){ ...} 
+0

相同的结果 - 即使我交换后。我的'真'从不打印。 – ihue

+0

显然它不会,因为“johns一加二”是不一样的“一加二” –

+0

所以同样不会考虑为子串?请指教。 – ihue

1

尝试你可以使用array_filter()strpos()

$matches = array_filter($devices, function($device) use ($input) { 
    return strpos($input, $device['name']) !== FALSE; 
}); 
dd($matches); 

array_filter()不重指数,所以第一个关键不是0,而是11(在这种情况下)。

1

stripos函数>>> strpos

“stripos函数” 错正确的是 “strpos”

和参数必须

strpos(以搜索的字符串,你想要的字符串)

if (strpos($device['name'], $input) !== false) { 
    echo 'true'; 
} 
+0

'stripos'不区分大小写'strpos',所以也应该工作。 – Rudie

+0

是的,对不起。我认为你的代码工作。我在这里测试 http://codepad.org/D9a5XGUd。 – Akram

相关问题