检查多维数组中是否存在值并获取项的键

时间:2014-04-11 11:10:58

标签: php multidimensional-array

我尝试使用此功能对文件扩展名进行分类。

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。我怎么能做对的?

3 个答案:

答案 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;
        }
    }

Demo

答案 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;
}