我正在尝试搜索文件列表,并且仅对名称中包含数组中的一些值的文件执行工作。我希望每次有新文件名时不必循环遍历数组。
ala-
$needle = array('blah', 'bleh');
foreach($file_list as $file)
{
foreach($needle as $need)
if(strstr($file, $need) !== false)
{
// do something...
}
}
我只需要知道数组中的字符串之一是否在文件名中,而不是字符串的位置。
我想使用类似的东西strstr()
但它不允许使用数组作为针。
i.e.-
if(strstr($haystack, array('blah', 'bleh')))
{
// do something...
}
我宁愿远离正则表达式,它似乎是锤子工作的雪橇。有任何想法吗?
IMO 在这里使用正则表达式就可以了:
$pattern = '/' . implode('|', array_map('preg_quote', $needle)) . '/i';
foreach($file_list as $file) {
if(preg_match($pattern, $file)) {
// do something
}
}
参考:preg_quote http://www.php.net/manual/en/function.preg-quote.php
这是一种更“有创意”的方法(但它使用内部循环,并且很可能更慢,因为您实际上在数组上循环了几次):
function cstrstr($haystack, $needle) {
return strstr($haystack, $needle) !== false;
}
foreach($file_list as $file) {
if(array_sum(array_map('cstrstr',
array_pad(array($file), count($needle), $file),
$needle))) {
// do something
}
}
但正则表达式的优点应该是显而易见的:您只需创建模式once而在“有趣”的解决方案中,你总是必须创建一个长度的数组count($needle)
对于每一个$file
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)