Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP从Tabdelimited文件创建结构化数组?_Php_Arrays_Tab Delimited - Fatal编程技术网

如何使用PHP从Tabdelimited文件创建结构化数组?

如何使用PHP从Tabdelimited文件创建结构化数组?,php,arrays,tab-delimited,Php,Arrays,Tab Delimited,我在读取以制表符分隔的文件时遇到问题 我的文件的结构是: Field 1 Field 2 Field 3 Element11 Element12 Element13 Element21 Element22 Element23 Element31 Element32 Element33 我想从该文件创建一个具有以下结构的数组: $csv = array( array( 'Field 1' => 'Element11',

我在读取以制表符分隔的文件时遇到问题

我的文件的结构是:

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',

            )    
        );
我该怎么做

如果要跳过标题行,只需在进入循环之前调用一次
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);

也可以将头作为所需的数组键获取

$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);

实际上,该文件不是通用的(CSV):)CSV已成为。。“数据被某物分隔开”,正如一位同事在过去常说的那样;“字符分隔值”@colheath这就是为什么我提供了
“\t”
作为
fgetcsv()
的第三个参数:-是啊。。。遗漏了该参数(:
$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);