我在scandir()的foreach循环中,目录文件是$files as $file
。我试图通过使用一组针来简化我的strripos文件类型排除,而不是为每个文件类型传递几个strripos行。
这有效:
if ($code !== 'yes'){
$excluded = strripos($file, '.js')
|| strripos($file, '.pl')
|| strripos($file, '.py')
|| strripos($file, '.py')
|| strripos($file, '.rb')
|| strripos($file, '.css')
|| strripos($file, '.php')
|| etc.;
} else {
$excluded = '';
}
但这不是:
if ($code !== 'yes'){
$exclusions = array('.js, .pl, .py, .rb, .css, .php, etc.');
foreach($exclusions as $exclude){
$excluded = strripos($file, $exclude);
}
} else {
$excluded = '';
}
$code
是一个短代码属性,由用户定义为“是”或其他任何内容=否。
然后当我到达输出时,我检查$excluded
是否已定义为“是”。就像我说的,它适用于第一个例子,但我不能让数组工作。重申一下,我已经在$file
的{{1}}循环中。
更新
尝试使用scandir()
,但我可能做错了。我试过了:
in_array
我试过了:
$exclusions = array('.js', '.pl', '.py', '.rb', '.css', '.php', '.htm', '.cgi', '.asp', '.cfm', '.cpp', '.dat', '.yml', '.shtm', '.java', '.class');
$excluded = strripos($file, (in_array($exclusions)));
不行。
答案 0 :(得分:3)
您的数组当前只有一个元素,这是一个长字符串:
'.js, .pl, .py, .rb, .css, .php, etc.'
你应该引用你的每个字符串元素:
$exclusions = array('.js', '.pl', '.py', '.rb', '.css', '.php', 'etc.');
尝试将代码更改为:
$excluded = 'no';
if ($code !== 'yes'){
$exclusions = array('.js', '.pl', '.py', '.rb', '.css', '.php');
foreach($exclusions as $exclude){
$check = strripos($file, $exclude);
if ($check !== false) {
$excluded = 'yes';
break;
}
}
}
首先分配$excluded = 'no';
。只要strripos
返回false
以外的任何内容,您就会分配$excluded = 'yes';
并退出foreach循环。这样你最终会得到'是'或'不'。
答案 1 :(得分:1)
我假设您正在尝试检查特定目录中的任何文件是否在数组$exclusions
中具有扩展名,如果是,则排除该文件。
所以,如果这就是你想要的,那么你可以创建一个函数让stripos
接受数组作为针:
function striposa($haystack, $needle, $offset=0) {
if(!is_array($needle)) $needle = array($needle);
foreach($needle as $query) {
if(stripos($haystack, $query, $offset) !== false) {
return true; // stop on first true result
}
}
return false;
}
(this回复的修改版本)
然后,在您的代码中,您可以像下面一样使用它:
if ($code !== 'yes') {
$exclusions = array('.js', '.pl', '.py', ...);
$flag = striposa($file, $exclusions);
if ($flag) {
// file contains one of the extensions
} else {
// no matching extensions found
}
}
请注意,如果$file
类似于hi.js.foo
,则会失败,但为了确保不会发生这种情况,您可以使用pathinfo()
提取{{1}}中提到的扩展名。 {3}}发帖。
答案 2 :(得分:0)
尝试以下方法:
$extensions = array('js', 'pl', ...);
$extension = strtolower(array_pop(explode('.', $file)));
$excluded = in_array($extension, $extensions);
if (! $excluded) {
// do something with file
}
您还可以使用pathinfo来提取扩展程序。