2014-04-11 58 views
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){ 
     return in_array(strtolower($ext), $extClass) ? $key : false; 
    } 
} 

extClass('txt')结果是false代替text。看起来在这个多维数组中找不到值txt。我怎么能说得对?

+0

在第一次比较中,只有你想返回键的值。所以,就你的情况而言,只有当你传递'7z'作为参数时,它才会返回适当的值。 – dikesh

回答

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 
} 
2

您是从功能过早返回。你需要检查使用情况,因此改变你的foreach这样

foreach($extClasses as $key=>$extClass){ 
     if(in_array(strtolower($ext), $extClass)) 
     { 
      return $key; 
     } 
    } 

Demo

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; 
} 
相关问题