你好。我有这个代码:
getMap
,我的数组列出如下:
public function parse_reports($filename)
{
$result = array();
$fp = fopen($filename, "r");
if (($headers = fgetcsv($fp, 0, "\t")) !== FALSE)
if ($headers)
while (($line = fgetcsv($fp, 0, "\t")) !== FALSE)
if ($line)
if (sizeof($line)==sizeof($headers))
$result[] = array_combine($headers,$line);
fclose($fp);
return $result; //return result
}
我需要的是数组编号采用VNUM编号,例如如下所示:
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
)
你可以看到我需要的是用我的.txt标题所具有的VNUM更改数组ID ...如果有人可以帮助我,我将非常高兴!谢谢! 如果您需要更多详细信息,请随时向我询问
感谢Eddie
答案 0 :(得分:0)
您可以使用array_reduce
注意:我必须使用implode
和explode
,因为文本文件中有隐藏/特殊字符。
像:
public function parse_reports($filename)
{
$result = array();
$fp = fopen($filename, "r");
if (($headers = fgetcsv($fp, 0, "\t")) !== FALSE)
if ($headers)
while (($line = fgetcsv($fp, 0, "\t")) !== 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
)
......
答案 1 :(得分:0)
您可以使用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, "\t")) !== FALSE)
if ($headers)
$headers = array_map("trim", $headers );
while (($line = fgetcsv($fp, 0, "\t")) !== 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