0

次のようなデータをループする正規表現があります

23:10:54 User Name 1 has looted 598 x Dark Ochre
23:13:58 UserName 2 has looted 947 x Obsidian Ochre
22:55:29 User Name3 has looted 1509 x Onyx Ochre
22:55:29 User Name3 has looted 3 x Obsidian Ochre

正規表現(以下)は、データを値に正しく解析します$value['userName'];

$re = '/^(?<timeMined>[0-9]{2}:[0-9]{2}:[0-9]{2}) # timeMined 
     \s+
     (?<userName>[\w\s]+)        # user name
     \s+(?:has\s+looted)\s+    # garbage text between name and amount
     (?<amount>\d+)              # amount
     \s+x\s+                     # multiplication symbol
     (?<item>.*?)\s*$            # item name (to end of line)
   /xmu';
preg_match_all($re, $sample, $matches, PREG_SET_ORDER);

以下のデータ セットには、3 つの異なるユーザー名があります。データをループして、まだ存在しない場合は配列にユーザー名を追加しようとしています。これは私が現在持っているものです。ただし、ユーザー名 3 という 1 つの結果しか得られません。ここで問題がどこにあるのか混乱しています。

foreach ($matches as $value){
  $userName = $value['userName'];
  echo $userName."<BR>";
  $userNameArray = array();
  if (in_array($userName, $userNameArray)){
  }
  else {
    array_push($userNameArray, $userName);
  }
}
echo "<BR><BR><BR><BR><BR>";
foreach ($userNameArray as $value){
  echo $value."<BR>";
}

このコードの結果は次のようになります。上部は正確ですが、下部には 2 つのユーザー名がありません

User Name 1
UserName 2
User Name3
User Name3






User Name3
4

1 に答える 1

1

各反復の for ループで配列を削除します;)

foreach ($matches as $value){
  $userName = $value['userName'];
  echo $userName."<BR>";
  $userNameArray = array(); // resetting the array each time...
  if (in_array($userName, $userNameArray)){
  }
  else {
    array_push($userNameArray, $userName);
  }
}
于 2013-01-04T22:10:27.823 に答える