2017-10-29 12 views
2

누군가 정규식으로 정렬하는 데이터 세트를 갖도록 도와 줄 수 있습니까? 올바른 결과를 가지고 있지만 fputcsv를 호출하려고 할 때 스크립트는 IP가 아닌 헤더가없는 필드 만 인쇄하므로 인쇄해야합니다.중첩 배열의 PHP fputcsv입니다.

21940504 21940524 
10145712  
10139358 10139458 
10164438  

내가 넣어하는 방법을 알아낼 필요가 : 여기

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입니다 : 이것은 내 데이터가 결과

<?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); 

: 여기

내 코드입니다 첫 번째 열의 IP는 다음과 같습니다.

내가 제대로 브래킷을 계산하는 경우

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 루프의 마지막 반복에서있을 것입니다 :

답변

1

나는이 모든에 대해 무엇인지 잘 모릅니다. 나는 그것이 당신이 CSV fputcsv($file, $customers[$customer]);에 쓰고 싶은 것이 아니라고 확신합니다.

스크립트 만 인쇄되어

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

이 또한 이해되지 않는다 : 그리고 foreach는 배열의 키 배열 대신이 같은 as $customers[$customer])

해보십시오 뭔가 그런 식으로 할당을 사용하여 본 적이 헤더가없는 필드가있는 IP

헤더는 첫 번째 행 (일반적으로 CSV)이며 열 같은 IPaddress

ns의, 나는 다음과 같이 첫 번째 열에서 IP를 설정하는 방법을 알아낼해야합니다

이 164.38.32.1002194050421940524

가 여기에 IP가 열입니다, 헤더가 아닙니다. 혼란 스럽네요. 어쨌든 당신이 원하는 것을 정리하려고 최선을 다 했어요.

다른 행은 어떻게 든 데이터 배열에 헤더가 있음을 의미합니까? 내가 말하길, IP는 "최상위 배열 키"이고, 다른 데이터는 중첩 된 배열의 값입니다.

+0

감사합니다. 지금 일하고 있습니다 – Simon

+0

물론, 당신이 필요로했던 것을 정리해 내서 기뻤습니다. – ArtisticPhoenix

0

감사합니다. 이 APPEND에 의해 마지막 장소에있다 그러나

21940504 21940524 164.38.32.100 
10145712 86.11.76.246  
10139358 10139458 185.31.96.130 
10164438 2.126.213.238 

을하고 나는 그것이 첫 번째 열에서 할 필요가 :

IP 주소는 다음과 같이

, CSV 파일에 지금 보이고있다.

+0

나 한테 말하면, 나는 이미 array_unshift로 대답을 업데이트했다. 이 "주석"을 별도의 답으로 써야 할 필요는 없습니다. – ArtisticPhoenix