0

私の PHP スクリプトについて助けが必要です。それで、これが取引です。

30 分ごとに変更される .txt ファイル内の次のテキストをチェックする preg_match があります: LYBE_TWR,LYBE_APP,LYBA_CTR,LYPG_TWR,LYPG_APP,LYTV_TWR,LYNI_APP)

それは完全に実行され、存在する場合は上記の文字列を取得します。

しかし、すべての組み合わせが常に存在するわけではないため、7 つの組み合わせのうちどれが見つかったかをさらに確認する必要があります。例: 現在のテキスト ファイルには、LYBE_TWR、LYBE_APP、LYPG_TWR が含まれています。preg_match が機能し、3 つの値をエコーできますが、これが必要です。

LYBE_TWR : PRESENT/NOT PRESENT
LYBE_APP: PRESENT/NOT PRESENT
LYBA_CTR PRESENT/NOT PRESENT
LYPG_TWR PRESENT/NOT RESENT 
etc.

そのため、テキスト ファイル内で見つかった場合は存在するとエコーし、そうでない場合は存在しないとエコーします。正しい結果は次のようになります。

LYBE_TWR : PRESENT
LYBE_APP: PRESENT
LYBA_CTR NOT PRESENT
LYPG_TWR PRESENT

たとえばif ($string == "LYBE_TWR") { echo 'present'; } else { echo 'not present'}、これを行うと、の正しい値がエコーされますLYBE_TWRが、実際には私が if-ed したものではないため、後で存在しないと表示されます。

私自身もよくわからないので、ご理解いただければ幸いです(rofl)

編集:ここに現在のコードがあります..それはまだWIPであるため、完成しておらず、いくつかのエラーが発生することを念頭に置いてくださいhttp://pastebin.com/z1r4A78E ありがとう。

4

1 に答える 1

0

これは、文字列が行ではなくファイルに表示されているかどうかに関心があるという前提で機能するコードです。文字列をプレフィックスとサフィックスに分割し、数値を無視しています。読みやすくするために、すべてのコードをコピーしませんでした

$prefixes = array("LYBA", "LYBE", "LYPG", "LYNI", "LYTV");
$suffixes = array("TWR", "APP", "CTR");

foreach($prefixes as $prefix)
{
    foreach($suffixes as $suffix)
    {
        $results[$prefix."_".$suffix] = 0;
    }
}

if(preg_match('/^('.implode("|",$prefixes).'|)_[A-Z0-9]*_*('.implode("|",$suffixes).')/', $line, $matches))
{
    (... your code ...)
    $match_string = $matches[1]."_".$matches[2];
    $results[$match_string]++;

}

foreach($results as $key => $value)
{
    echo $key;
    if($value > 0)
    {
        echo " PRESENT";
    }
    else
    {
        echo " NOT PRESENT";
    }
    echo "<br/>";
}
于 2012-08-14T17:31:17.390 に答える