2017-01-10 93 views
0

我試圖獲得真值值,但結果總是顯示false,該如何解決這種情況?檢查值存在於具有相同鍵值的數組中

$allow = array(
    "pdf"=>"application/pdf", 
    "doc"=>"application/msword", 
    "docx"=>"application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
    "docx"=>"application/zip" 
); 

if (in_array("application/vnd.openxmlformats-officedocument.wordprocessingml.document",$allow)) { 
    echo "true"; 
} else { 
    echo "false"; 
} 

在這種情況下,我有兩個* .docx文件,但MIME類型是不同的,如何讓他們兩個???

+3

你不能定義與相同密鑰的兩個數組元素,如果使用相同的密鑰兩個數組元素則最新的一個覆寫以前 –

+0

我有不同的MIME兩種文件DOCX,如何讓他們兩個? –

+0

@AbuAyyub:docx1,docx2 ?? –

回答

1

這可能會幫助你請嘗試下面的解決方案。您可以將docx作爲一個關鍵值,並將逗號分隔爲逗號。

$allow = array(
    "pdf" => "application/pdf", 
    "doc" => "application/msword", 
    "docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/zip", 
); 

$allownew = array_values($allow); 


if (in_array("application/vnd.openxmlformats-officedocument.wordprocessingml.document", $allownew)) 
{ 
    echo "true"; 
} 
else 
{ 
    echo "false"; 
} 
+0

非常不好的做法。使用*** array_values ***代替foreach循環。仍然不是推薦的方式。 ***使用索引數組代替*** –

+0

Ravi hirani - 你的解決方案是不好的做法夥計.. – craig

+0

@AbuAyyub - 歡迎兄弟.. – craig

0

檢查數組

$allow = array(
    "pdf"=>"application/pdf", 
    "doc"=>"application/msword", 
    "docx"=>"application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
    "docx"=>"application/zip" // this will be overridden by above index. 
); 

    if(in_array("application/vnd.openxmlformats-officedocument.wordprocessingml.document",$allow)){ 
    echo "true"; 
    }else{ 
    echo "false"; 
    } 

你的陣列具有相同的密鑰,DOCX,所以最後一個會被舊的覆蓋。

在你的情況

"application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
overriden by "application/zip" 

編輯

$allow = [ 
"pdf"=>"application/pdf", 
"doc"=>"application/msword", 
"docx"=>[ 
     "docx"=>"application/zip", 
     "application/vnd.openxmlformats-officedocument.wordprocessingml.document"] 
]; 

而且條件會。

function in_array_r($needle, $haystack, $strict = false) { 
    foreach ($haystack as $item) { 
     if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 
      return true; 
     } 
    } 

    return false; 
} 

echo in_array_r("application/vnd.openxmlformats-officedocument.wordprocessingml.document", $allow) ? 'true' : 'false'; 

我參考了link

+0

我有兩個文件* .docx與不同的啞劇,如何讓他們兩個? –

+0

檢查我的編輯部分 – rahulsm

2

問題是該數組包含兩個具有相同鍵的項目。即,"application/zip"優先於"application/vnd.openxmlformats-officedocument.wordprocessingml.document"。以下是print_r($allow);輸出:

Array 
(
    [pdf] => application/pdf 
    [doc] => application/msword 
    [docx] => application/zip 
) 

所以,你應該application/zip指定不同的密鑰,例如:

$allow = array("pdf" => "application/pdf", 
    "doc" => "application/msword", 
    "docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
    "zip" => "application/zip" 
); 
+0

我有兩個文件與不同的啞劇文件,如何讓他們兩個? –

+0

@AbuAyyub,只需使用不同的鍵爲陣列項目 –

1

我可以看到keys沒有你的情況很重要。 您可以使用indexed array而不是multidimensional array

$allow = array("application/pdf", 
       "application/msword", 
       "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
       "application/zip"); 

如果你真的想使用多維數組然後,

使用不同的密鑰兩個默劇,如docx1, docx2

$allow = array(
    "pdf"=>"application/pdf", 
    "doc"=>"application/msword", 
    "docx1"=>"application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
    "docx2"=>"application/zip" 
); 
1

也許你應該與該陣列的「翻轉」的版本試試吧:現在

$allow = array(
    "application/pdf"=>"pdf", 
    "application/msword"=>"doc", 
    "application/vnd.openxmlformats-officedocument.wordprocessingml.document"=>"docx", 
    "application/zip"=>"docx" 
); 

,當然,你需要搜索該陣列的鑰匙,而不是像

$k="application/vnd.openxmlformats-officedocument.wordprocessingml.document"; 
If (array_key_exists($k,$array)) echo $array[$k]; // docx 
+0

其實,我認爲這種方法... –

相關問題