我在阅读制表符分隔文件时遇到问题。
我档案的结构是:
Field 1 Field 2 Field 3
Element11 Element12 Element13
Element21 Element22 Element23
Element31 Element32 Element33
从这个文件中我想创建一个具有这种结构的数组:
$csv = array(
array( 'Field 1' => 'Element11',
'Field 2' => 'Element12',
'Field 3' => 'Element13',
),
array( 'Field 1' => 'Element21',
'Field 2' => 'Element22',
'Field 3' => 'Element23',
),
array( 'Field 1' => 'Element31',
'Field 2' => 'Element32',
'Field 3' => 'Element33',
)
);
我该怎么做?
答案 0 :(得分:16)
还要将标题作为您需要的数组键
$result = array();
$fp = fopen('/path/to/file','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);
print_r($result);
答案 1 :(得分:2)
$result = array();
$fp = fopen('/path/to/file','r');
while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) if ($line) $result[] = $line;
fclose($fp);
print_r($result);
如果您想跳过标题行,只需在进入循环之前调用fgets()
一次。或者,如果您希望数组如上所述是关联的:
$result = array();
$fp = fopen('/path/to/file','r');
$headers = fgetcsv($fp, 0, "\t");
$row = 0;
while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) if ($line) {
for ($col = 0; isset($line[$col]); $col++) {
$result[$row][$header[$col]] = $line[$col];
}
$row++;
}
fclose($fp);
print_r($result);