1
命名的键(不是数字键)阵列,但我想它们被命名为键而不是数字。使用SimpleXML解析XML文件,并创建使用我已经从解析的XML文件中使用带数字键的SimpleXML创建多维数组PHP
XML文件如下:
<workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" >
<Worksheet ss:Name="tab1">
<Table>
<Row>
<Cell><Data>Id</Data></Cell> // names which i want to be array keys.
<Cell><Data>Company</Data></Cell> //
<Cell><Data>Year</Data></Cell> //
</Row>
<Row>
<Cell><Data>120</Data></Cell> //values
<Cell><Data>Apple</Data></Cell>
<Cell><Data>2011</Data></Cell>
</Row>
<Row>
<Cell><Data>121</Data></Cell>
<Cell><Data>Samsung</Data></Cell>
<Cell><Data>2010</Data></Cell>
</Row>
</Table>
</Worksheet>
<Worksheet ss:Name="tab2">
<Table>
<Row>
<Cell><Data>Id</Data></Cell>
<Cell><Data>Company</Data></Cell>
<Cell><Data>Year</Data></Cell>
</Row>
<Row>
<Cell><Data>320</Data></Cell>
<Cell><Data>Sony</Data></Cell>
<Cell><Data>2001</Data></Cell>
</Row>
<Row>
<Cell><Data>321</Data></Cell>
<Cell><Data>HTC</Data></Cell>
<Cell><Data>2001</Data></Cell>
</Row>
</Table>
</Worksheet>
</workbook>
她是我的解析XML文件,并创建阵列
$xml=simplexml_load_file($fileData);
$result= array();
$i=0;
foreach($xml->Worksheet as $worksheet):
$result['tab'][$i] = array();
$result['tab'][$i]['name']=(string)$worksheet->attributes("ss", true)->Name;
foreach($worksheet as $table):
$k =0;
unset($table->Row[0]); //removing first row which i want to be keys of array
foreach($table as $row):
foreach($row as $cell):
$result['tab'][$i]['data'][$k][] =(string)$cell->Data;
endforeach;
$k++;
endforeach;
endforeach;
$i++;
endforeach;
return $result;
数组,我得到的代码:
Array
(
[tab] => Array
(
[0] => Array
(
[name] => tab1
[data] => Array
(
[0] => Array
(
[0] => 120 //keys should be name of first row of xml
[1] => Apple
[2] => 2011
)
[1] => Array
(
[0] => 121
[1] => Samsung
[2] => 2010
)
)
)
[1] => Array
(
[name] => tab2
[data] => Array
(
[0] => Array
(
[0] => 320
[1] => Sony
[2] => 2001
)
[1] => Array
(
[0] => 321
[1] => HTC
[2] => 2001
)
)
)
)
)
我想排列如下:
Array
(
[tab] => Array
(
[0] => Array
(
[name] => tab1
[data] => Array
(
[0] => Array
(
[Id] => 120 // named keys instead of numbers
[Company] => Apple
[Year] => 2011
)
[1] => Array
(
[Id] => 121
[Company] => Samsung
[Year] => 2010
)
)
)
[1] => Array
(
[name] => tab2
[data] => Array
(
[0] => Array
(
[Id] => 320
[Company] => Sony
[Year] => 2001
)
[1] => Array
(
[Id] => 321
[Company] => HTC
[Year] => 2001
)
)
)
)
)
这是一个有点长的问题。但很好解释。 谢谢。
哇,关闭创建发生器产生array_combine和iterator_to_array :) – pce
谢谢! [我对这个问题的回答*使用列标题处理CSV到数组中的关键*](http://stackoverflow.com/a/10181302/367456)显示,一旦设法将每行转换为数组,它也适用于5.5以下的PHP,因此封闭和发生器少。以防其他方式写下来。这也是这个想法的来源,这里的问题让我想起了那个。 – hakre
它不适用于PHP 5.4.19。 – nohan