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
但是它在追加的最后一个地方,我需要它在第一列。
有人可以帮助我吗?我有一组数据,我正在通过正则表达式对其进行整理。我得到了正确的结果,但是当我尝试调用 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
但是它在追加的最后一个地方,我需要它在第一列。