我尝试使用此功能对文件扩展名进行分类。
function extClass($ext){
$extClasses = array(
'archive' => array('7z', 'cbr', 'deb', 'gz', 'pkg', 'rar', 'rpm', 'sitx', 'tar.gz', 'zip', 'zipx'),
'web' => array('php', 'js', 'css', 'asp', 'aspx', 'htm', 'html', 'cc', 'cpp', 'py', 'jsp'),
'text' => array('txt', 'doc', 'docx', 'log', 'rtf'),
);
foreach($extClasses as $key=>$extClass){
return in_array(strtolower($ext), $extClass) ? $key : false;
}
}
extClass('txt')
的结果是false
而不是text
。似乎在此多维数组中找不到值txt
。我怎么能做对的?
答案 0 :(得分:2)
您不会遍历foreach中的所有元素。 在第一个循环中,您返回$ key或false,因此它不会检查其他索引。
工作代码:
function extClass($ext){
$extClasses = array(
'archive' => array('7z', 'cbr', 'deb', 'gz', 'pkg', 'rar', 'rpm', 'sitx', 'tar.gz', 'zip', 'zipx'),
'web' => array('php', 'js', 'css', 'asp', 'aspx', 'htm', 'html', 'cc', 'cpp', 'py', 'jsp'),
'text' => array('txt', 'doc', 'docx', 'log', 'rtf'),
);
foreach($extClasses as $key=>$extClass){
if (in_array(strtolower($ext), $extClass)){ // Return only if found during the loop
return $key;
}
}
return false; // If nothing found, return false
}
答案 1 :(得分:2)
你过早地从函数返回..你需要检查使用条件,所以改变这样的foreach
foreach($extClasses as $key=>$extClass){
if(in_array(strtolower($ext), $extClass))
{
return $key;
}
}
答案 2 :(得分:0)
试试这个:
function extClass($ext){
$extClasses = array(
'archive' => array('7z', 'cbr', 'deb', 'gz', 'pkg', 'rar', 'rpm', 'sitx', 'tar.gz', 'zip', 'zipx'),
'web' => array('php', 'js', 'css', 'asp', 'aspx', 'htm', 'html', 'cc', 'cpp', 'py', 'jsp'),
'text' => array('txt', 'doc', 'docx', 'log', 'rtf'),
);
foreach($extClasses as $key=>$extClass){ print_r($extClass);
if (in_array(strtolower($ext), $extClass)) {
return $key;
}
}
return false;
}