PHP .txt到数组制表符分隔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP .txt到数组制表符分隔相关的知识,希望对你有一定的参考价值。
你好。我有这个代码:
public function parse_reports($filename)
{
$result = array();
$fp = fopen($filename, "r");
if (($headers = fgetcsv($fp, 0, " ")) !== FALSE)
if ($headers)
while (($line = fgetcsv($fp, 0, " ")) !== FALSE)
if ($line)
if (sizeof($line)==sizeof($headers))
$result[] = array_combine($headers,$line);
fclose($fp);
return $result; //return result
}
和我的数组列出如下:
Array
( //test array1
[0] => Array
( //array 0
[VNUM] => 1
[LOCALE_NAME] => Yang
)
[1] => Array
( //array 1
[VNUM] => 2
[LOCALE_NAME] => Ελληνική Έκδοση
)
[2] => Array
( //array 2
[VNUM] => 10
[LOCALE_NAME] => Σπαθί+0
)
[3] => Array
( //array 3
[VNUM] => 11
[LOCALE_NAME] => Σπαθί+1
)
我需要的是数组号取VNUM数,例如如下所示:
Array
(
[1] => Array
(
[VNUM] => 1 //this take the value of VNUM
[LOCALE_NAME] => Yang
)
[2] => Array
(
[VNUM] => 2 //this take the value of VNUM
[LOCALE_NAME] => Ελληνική Έκδοση
)
[10] => Array //this take the value of VNUM
(
[VNUM] => 10 //this take the value of VNUM
[LOCALE_NAME] => Σπαθί+0
)
[11] => Array
(
[VNUM] => 11 //this take the value of VNUM
[LOCALE_NAME] => Σπαθί+1
)
你可以看到我需要的是用我的.txt标题所具有的VNUM来改变数组ID ...如果有人可以帮助我,我将非常高兴!谢谢!如果您需要更多细节,请随时问我
感谢Eddie
答案
你可以使用array_reduce
注意:我必须使用implode
和explode
,因为文本文件中有隐藏/特殊字符。
喜欢:
public function parse_reports($filename)
{
$result = array();
$fp = fopen($filename, "r");
if (($headers = fgetcsv($fp, 0, " ")) !== FALSE)
if ($headers)
while (($line = fgetcsv($fp, 0, " ")) !== FALSE)
if ($line)
if (sizeof($line)==sizeof($headers))
$result[] = array_combine($headers,$line);
fclose($fp);
//To use the VNUM as the key
$result = array_reduce($result,function($c,$v){
$val = explode( ",", implode( ",", $v ));
$c[ $val[0] ] = $v;
return $c;
}, array());
return $result;
}
得到这个结果
Array
(
[1] => Array
(
[VNUM] => 1
[LOCALE_NAME] => Yang
)
[2] => Array
(
[VNUM] => 2
[LOCALE_NAME] => Ελληνική Έκδοση
)
[10] => Array
(
[VNUM] => 10
[LOCALE_NAME] => Σπαθί+0
)
[11] => Array
(
[VNUM] => 11
[LOCALE_NAME] => Σπαθί+1
)
[12] => Array
(
[VNUM] => 12
[LOCALE_NAME] => Σπαθί+2
)
[13] => Array
(
[VNUM] => 13
[LOCALE_NAME] => Σπαθί+3
)
......
Doc:http://php.net/manual/en/function.array-reduce.php
另一答案
你可以使用像array_column()
...
return array_column ($result, null, 'VNUM'); //return result
这使用VNUM列作为数组的索引。
更新:您的列标题可能包含空格,因此array_column()
不会按原样运行,但如果您尝试...
public function parse_reports($filename)
{
$result = array();
$fp = fopen($filename, "r");
if (($headers = fgetcsv($fp, 0, " ")) !== FALSE)
if ($headers)
$headers = array_map("trim", $headers );
while (($line = fgetcsv($fp, 0, " ")) !== FALSE)
if ($line)
if (sizeof($line)==sizeof($headers))
$result[] = array_combine($headers,$line);
fclose($fp);
return array_column ($result, null, 'VNUM'); //return result
}
这将清除array_map()
调用中的任何标头值。
更新(2):
看起来好像标题有些奇怪 - 最后一次尝试......
return array_column($result, null, $headers[0]);
样本数据...
VNUM LOCALE_NAME
1 Yang
2 Ελληνική Έκδοση
10 Σπαθί+0
11 Σπαθί+1
12 Σπαθί+2
13 Σπαθί+3
14 Σπαθί+4
15 Σπαθί+5
16 Σπαθί+6
17 Σπαθί+7
18 Σπαθί+8
19 Σπαθί+9
以上是关于PHP .txt到数组制表符分隔的主要内容,如果未能解决你的问题,请参考以下文章
无法将制表符分隔的 Txt 文件从 S3 加载到 Redshift
编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。(代码片段