2016-08-19 6 views
-2

完全に困惑しています。私は、私のウェブサイトのディレクトリにあるすべてのファイルを保持する配列を持っています。私は、結果をフィルタリングするためにforeachループ内のifステートメントを使用します。ファイル名が3文字の特定の組み合わせで始まる場合、("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra")ファイル名は$alert_stringに割り当てられます。if文から実行されるすべてのファイルに対してPHPがtrueを返します。

何らかの理由で、すべてのファイルがif文の中にtrueを返すため、変数は毎回上書きされ、最後にスキャンされたファイルに変数が割り当てられます。

コード:

$alert_files = scandir("/home/prww/public_html/blog/"); 

    foreach ($alert_files as $values) { 
     if ((substr($values, 0, 3)) == ("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra")) { 
      $alert_string = $values; 
     } 
    } 

ファイルのディレクトリに:

Files in the directory

明らかに、 "HTA" で始まるファイルのみをif文でtrueを返す必要があります。では、なぜすべてのファイルが真実を返し、どうすればこの問題を解決できますか?

+4

ための助けを借りて、これを達成するための機能を使用することができます。 "if(substr($ values、0、3))==" wwa "OR substr($ values、0,3))==" wea "'などの各条件をテストする必要があります。 –

+0

これは構文が間違っています。マニュアルまたはマニュアルを参照してください。 –

答えて

1

if構文が間違っています。 あなたは、配列を使用してロジックを簡素化することができます。

//array of allowed substrings, used as index for quicker lookup 
$substringKeys = array_flip(["wwa","wea","swa","hta","cta","twa","fra"]); 

$alert_string=''; 

$alert_files = scandir("/home/prww/public_html/blog/"); 

foreach ($alert_files as $filename) { 
    $substr = substr($filename, 0, 3); 
    if (isset($substringkeys[$substr])) { 
     //add to, not overwrite, $alert_string 
     $alert_string .= $values; 
    } 
} 
1
("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra") 

は、ブール値TRUEを生成する。 substr($values, 0, 3)が何かを返す限り、条件式は常にTRUEになります。

オペレータの実際の働きを理解せずに、英語で意味のあるコードを書くことはできません。他のすべてが失敗した場合は、echo中間結果が表示されますので、プログラムが何をしているのか理解できます。

0

あなたが「または」声明そのように行うことができないのでarray_map

$alert_files = scandir("/home/prww/public_html/blog/"); 

$fileNames = array_filter(array_map("checkName",$alert_files)); 
print_r($fileNames); 

function checkName($fileName) 
{ 
    $file = substr($fileName,0,3); 
    $conditionArray = array("wwa","wea","swa","hta","cta","twa","fra"); 
    if(in_array($file,$conditionArray)) 
    { 
     return $fileName; 
    } 
} 
関連する問題