2017-10-29 14 views
2

誰かが私が正規表現で並べ替えるデータのセットを持っているのを助けてくれますか?私は正しい結果を持っていますが、私がfputcsvを呼び出そうとしているとき、スクリプトはIPであるヘッダーのないフィールドだけを印刷しています。ここ入れ子配列のPHP fputcsv。

は私のコードです:

<?php 

$handle = fopen("data2.txt", "r"); 
if (!$handle) { 
    exit; 
} 

$customers = array(); 

while (($line = fgets($handle)) !== false) { 

    if(preg_match('/-([0-9]*)-pdt.html.*rd:(.*)\|X/i',$line,$output)){ 
     $product = $output[1]; 
     $customer = $output[2]; 

     if(!isset($customers[$customer])){ 

      $customers[$customer] = array($product); 

      } else { 
       if (!in_array($product, $customers[$customer])){ 

      $customers[$customer][] = $product; 

       } 
      }  
     } 
    } 
$file = fopen('file.csv', 'w+'); 
foreach ($customers as $customers[$customer]) 
{ 
    fputcsv($file, $customers[$customer]); 
} 
var_dump ($customers); 
fclose($handle); 

これは私のデータは結果である:ここ

array (size=10) 
    '164.38.32.100' => 
    array (size=2) 
     0 => string '21940504' (length=8) 
     1 => string '21940524' (length=8) 
    '86.11.76.246' => 
    array (size=1) 
     0 => string '10145712' (length=8) 
    '185.31.96.130' => 
    array (size=2) 
     0 => string '10139358' (length=8) 
     1 => string '10139458' (length=8) 
    '2.126.213.238' => 
    array (size=1) 
     0 => string '10164438' (length=8) 

はCSV形式です:私は置くためにどのように把握する必要があり

21940504 21940524 
10145712  
10139358 10139458 
10164438  

最初の列のIP:

164.38.32.100 21940504 21940524 

答えて

1

私はこれがすべてに約あるか知らない:

while (($line = fgets($handle)) !== false) { 
    .... 
    $customer = $output[2]; 
    .... 
} //end while loop, with $customer defined in it, 

foreach ($customers as $customers[$customer]) //<-- whats this about 
{ 
    fputcsv($file, $customers[$customer]); //<-- this also makes no sense 
} 

私が正しくカッコを数えた場合$customerの値は、whileループの最後の反復からなります。私はあなたがcsv fputcsv($file, $customers[$customer]);に書いて欲しいものではないと確信しています。

foreach ($customers as $ipAddress => $customer) 
{ 
    array_unshift($customer, $ipAddress); //prepend IP address to inner array 
    fputcsv($file, $customer); 
} 

をこれも意味がありません:

スクリプトがのみ印刷され、私の代わりにこのような何かを試してみてくださいキーas $customers[$customer])

配列でそのような割り当てを使用foreachの配列を見たことがありませんヘッダーなしのフィールドIP

ヘッダーは、最初の行(通常はCSVのもの)です。列は、列の名前ですこのようIPaddress

としてNS、私はこのような最初の列でIPを置くためにどのように把握する必要があります。

164.38.32.100,21940504,21940524

ここでIPは、列ですヘッダーではありません。それは混乱しています。とにかく、私はあなたが望むものを整理するために全力を尽くしました。

他の行は、どうやらデータ配列内にヘッダーがあることを意味しますか?私は、IPは "トップレベルの配列キー"であり、他のデータはネストされた配列の値であると言います。

+0

ありがとうございます!今働いて – Simon

+0

確かに、私はあなたが必要なものを整理することができたことをうれしく思いました。 – ArtisticPhoenix

0

ありがとうございます。

IPアドレスは、csvファイルになりました。このような

を示している。

21940504 21940524 164.38.32.100 
10145712 86.11.76.246  
10139358 10139458 185.31.96.130 
10164438 2.126.213.238 

それがAPPENDによって最後の場所にあり、私はそれが最初の列にする必要がありますが。

+0

あなたが私と話しているならば、私は既に答えを 'array_unshift'で更新しました。私はあなたに別の答えとしてこの "コメント"を書く必要はありませんが、 – ArtisticPhoenix

関連する問題