php 嵌套数组的 fputcsv。

php fputcsv of nested array.

有人可以帮助我吗?我有一组数据,我正在通过正则表达式对其进行整理。我得到了正确的结果,但是当我尝试调用 fputcsv 时,脚本只打印没有 header 的字段,它是 IP,也应该打印。

这是我的代码:

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

我不知道这是怎么回事:

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 数组使用像数组 Key as $customers[$customer])

这样的赋值

试试这样的方法:

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

这也说不通:

script is printing only fields without header which is IP

Headers 是第一行(通常是 CSV 文件)它们是列的名称,例如 IPaddress

I need to figure that out how to put IP at first column like this :

164.38.32.100,21940504,21940524

这里IP是一列,不是header。很迷茫,反正我已经尽力整理出你想要的了。

或者您的意思是,其他行在数据数组中以某种方式具有 header。我会说,IP是“顶级数组键”,其他数据是嵌套数组的值。

感谢您的关注。

IP 地址现在显示在 csv 文件中,

像这样:

21940504    21940524    164.38.32.100
10145712    86.11.76.246    
10139358    10139458    185.31.96.130
10164438    2.126.213.238   

但是它在追加的最后一个地方,我需要它在第一列。