2017-04-06 13 views
0

SOに実際に投稿することに頼っています。 また、これは何度も尋ねられている場合は、私はiveがここでそれらのほとんどを読んでいると思うが、ダイスはまだないと思う。preg_match_allからの重複した配列値の問題

私は生成されたログファイルcontinaing textを持っています。ログファイル内の行を抽出したいのですが: {22:30:47}システム: "Obambivas" StarPos:( - 59.938,7.375,56.813)ly Body :13 RelPos:( - 0.529636、-0.130899,0.838064)km NormalFlight

これまでのところ、preg_match_all経由でマッチを取得するためには、 しかし、私は実際には各システムを必要とします:ログはいくつかのexacly同じかもしれません。 "

それは何かと同じ結果をretrunsないどちらかとアイブ氏はイムが間違ってそれを使用してイムはかなり確かarray_uniqueを使用しようとしましたが、つまり10+は、各試合のために一致したので、私は試合からちょうどそれぞれの固有の一致を必要とする

を見つけましたログファイルにあります。事前に

これまでのところ(ごめんその厄介であれば)私のコード そして感​​謝

if (is_dir($log) && is_readable($log)) { 


if (!$files = scandir($log, SCANDIR_SORT_DESCENDING)) { 

} 
$newest_file = $files[0]; 

if (!$line = file($log . "/" . $newest_file)) { 

} else { 

    foreach ($line as $line_num => $line) { 


     $pos = strpos($line, 'System:"'); 

     $pos2 = strrpos($line, "ProvingGround"); 

     if ($pos !== false && $pos2 === false) { 

      preg_match_all("/\System:\"(.*?)\"/", $line, $matches); 
      $cssystemname = $matches[1][0]; 
      $curSys["name"] = $cssystemname; 


      preg_match_all("/\StarPos:\((.*?)\)/", $line, $matches2); 
      $curSys["coordinates"] = $matches2[1][0]; 
      $coord_parts = explode(",", $curSys["coordinates"]); 

      $curSys["x"] = $coord_parts[0]; 
      $curSys["y"] = $coord_parts[1]; 
      $curSys["z"] = $coord_parts[2]; 

      echo $curSys["name"].' | Coords: '.$curSys["x"].','.$curSys["y"].','.$curSys["z"].'<br />'; 

     } 

    } 
} 

}

+0

を避けるために、$ハッシュの配列を追加しましたあなたの入力と期待される出力についても言及してください。 –

+0

ありがとう、私は将来、申し訳ありません。 –

答えて

0

私は、代わりに、完全なコードの重複

if (is_dir($log) && is_readable($log)) { 


if (!$files = scandir($log, SCANDIR_SORT_DESCENDING)) { 

} 
$newest_file = $files[0]; 

if (!$line = file($log . "/" . $newest_file)) { 

} else { 

    $hash = array(); 

    foreach ($line as $line_num => $line) { 


    $pos = strpos($line, 'System:"'); 

    $pos2 = strrpos($line, "ProvingGround"); 

    if ($pos !== false && $pos2 === false) { 

     preg_match_all("/\System:\"(.*?)\"/", $line, $matches); 
     $cssystemname = $matches[1][0]; 
     if ($hash[$cssystemname] == "") 
     { 
      $curSys["name"] = $cssystemname; 


      preg_match_all("/\StarPos:\((.*?)\)/", $line, $matches2); 
      $curSys["coordinates"] = $matches2[1][0]; 
      $coord_parts = explode(",", $curSys["coordinates"]); 

      $curSys["x"] = $coord_parts[0]; 
      $curSys["y"] = $coord_parts[1]; 
      $curSys["z"] = $coord_parts[2]; 

      echo $curSys["name"].' | Coords: '.$curSys["x"].','.$curSys["y"].','.$curSys["z"].'<br />'; 

    } 
    } else $hash[$cssystemname] = "inhash"; 
} 
} 
+0

早速返信いただきありがとうございます、これはうまく動作しますが、それぞれのユニークなマッチだけが表示されますが、PHPの通知を受け取っているのは、最初です。 Notice:未定義の変数:cssystemname in C:\ wamp64 \ www \ elite \ update_logs.php 71 と第2: 注意:未定義のインデックス:Obambivas in C:\ wamp64 \ www \ elite \ update_logs.php行55 これらの作業上の罰金以外に、よかったです。 –

+0

if($ hash [$ cssystemname] == "")をif($ hash [$ cssystemname])に置き換えてください。 – diavolic

+0

ありがとうございましたthatsはハッシュ配列インデックスの問題をソートしました。 –

関連する問題