2014-04-11 60 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; 
} 
相關問題