2017-01-10 11 views
0

同じキー異なる値を持つ配列には存在しますが、結果は常に、どのようにこのケースを修正するを示して?この場合 チェック値は、私が<strong>真</strong>値を取得しようとしています

$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"; 
} 

、私は2つの* .docxのファイルを持っていますが、MIMEタイプが異なる場合、どのようにそれらの両方を可能にします?

+3

2つの配列要素に同じキーを使用した場合、同じキーで2つの配列要素を定義することはできません。 –

+0

の2つのdocxファイルがあります。 –

+0

@AbuAyyub:docx1、docx2 ?? –

答えて

1

これは、以下の解決策をお試しください。 docxを1つのキー値として作成し、mimeをカンマ区切りにすることができます。

$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

非常に悪い習慣です。 foreachループの代わりに*** array_values ***を使用してください。まだ推奨された方法ではありません。 ***索引付き配列を代わりに使用する*** –

+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" 

EDIT

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

AND条件になります。

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

私は2つのファイルを持っています* .docxは異なるmime、どのように両方を許可するには? –

+0

私の編集セクションを確認してください – rahulsm

2

問題は、配列に等しいキーを持つ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

私は異なるMIMEを持つ2つのdocxファイルを持っていますが、どのように両方を許可するのですか? –

+0

@AbuAyyub、単純に配列の項目に異なるキーを使用してください –

1

を私はkeysは、あなたのケースでは重要ではないことを見ることができます。 multidimensional arrayの代わりにindexed 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

実際に私はこの方法も考えています... –

関連する問題