使用PHP将多个XML提要解析为一个排序数组
我想创建一个可排序的列表,看起来像使用PHP将多个XML提要解析为一个排序数组,php,xml,arrays,Php,Xml,Arrays,我想创建一个可排序的列表,看起来像 $VAR1[0],$VAR2[0] $VAR1[1],$VAR2[1] 数据来自多个相同的结构化xml文件: $xmlfile=" <Level1> <Level2> <Level2Item VAR1="1" VAR2="2" ... /> <Level2Item VAR1="4" VAR2="5" ... /> <Level2Item VAR1="7" VAR2="8" ... />
- $VAR1[0],$VAR2[0]
- $VAR1[1],$VAR2[1]
$xmlfile="
<Level1>
<Level2>
<Level2Item VAR1="1" VAR2="2" ... />
<Level2Item VAR1="4" VAR2="5" ... />
<Level2Item VAR1="7" VAR2="8" ... />
</Level2>
</Level1>";
//Extract each item
$xml = new SimpleXMLElement($xmlfile);
foreach ($xml->Level2[0] as $result) {
array_push($VAR1Array, $result['VAR1']);
array_push($VAR2Array, $result['VAR2']);
//... etc etc
}
//sort
//$sortedArray = sort($VAR1Array);
从这个XML结构来看,在一个数组中存储数据的最佳方式是什么?我希望能够在一个数组中收集所有数据,以便可以按一个或两个变量对其进行排序并显示结果。如果我是您,我只需将所有SimpleXmlElement推送到一个数组中,然后使用uasort()和自定义回调函数按照您的意愿进行排序。这行吗?$xml=simplexml\u load\u文件(…);
$xml = simplexml_load_file(...);
$table = array();
foreach ($xml->Level2[0] as $result)
$table[] = $result->attributes();
function cmp_row($a, $b, $sortColumn)
{
if ($a == $b)
return 0;
return ($a < $b) ? -1 : 1;
}
$sortColumn = 'VAR1'; // make sure it's a clean string
uasort($table, create_function('$a,$b', 'return cmp_row($a, $b, "'.$sortColumn.'")'));
$table=array();
foreach($xml->Level2[0]作为$result)
$table[]=$result->attributes();
函数cmp_行($a、$b、$sortColumn)
{
如果($a=$b)
返回0;
回报率($a<$b)?-1:1;
}
$sortColumn='VAR1';//确保它是一根干净的绳子
uasort($table,create_函数($a,$b','return cmp_行($a,$b,'.$sortColumn'));
您还可以保留SimpleXMLElements并直接对它们进行排序,如果您愿意的话,就像apinstein所说的那样。我不太确定您要进行什么样的排序(您应该用一些示例来指定)。但最佳情况是,您不会将XML片段加载到数组中
$xmlfile="
<Level1>
<Level2>
<Level2Item VAR1="1" VAR2="2" ... />
<Level2Item VAR1="4" VAR2="5" ... />
<Level2Item VAR1="7" VAR2="8" ... />
</Level2>
</Level1>";
//Extract each item
$xml = new SimpleXMLElement($xmlfile);
foreach ($xml->Level2[0] as $result) {
$VAR1Array[] = (int) $result['VAR1'];
$VAR2Array[] = (int) $result['VAR2'];
//... etc etc
}
$xmlfile=”
";
//提取每个项目
$xml=新的simplexmlement($xmlfile);
foreach($xml->Level2[0]作为$result){
$VAR1Array[]=(int)$result['VAR1'];
$VAR2Array[]=(int)$result['VAR2'];
//…等等
}
最后,
sort();
作为整行,然后$array
将被排序。如果您像我在上面的示例中那样转换为int
s,您可以使用php的默认排序函数,而无需像其他人建议的那样使用用户定义的比较函数。array\u push
比使用php的$var[]稍微慢一点,更难阅读
语法将新元素添加到数组。此外,我完全确定您不能以这种方式分配$xmlfile(在双引号中使用未转换的双引号)
在这段代码中,定义$xmlfile的最佳方法是:
$xmlfile = <<<XML
<Level1>
<Level2>
<Level2Item VAR1="1" VAR2="2" ... />
<Level2Item VAR1="4" VAR2="5" ... />
<Level2Item VAR1="7" VAR2="8" ... />
</Level2>
</Level1>
XML;
$xmlfile=我不知道为什么显示不正确。预览显示得很好。
$xmlfile = <<<XML
<Level1>
<Level2>
<Level2Item VAR1="1" VAR2="2" ... />
<Level2Item VAR1="4" VAR2="5" ... />
<Level2Item VAR1="7" VAR2="8" ... />
</Level2>
</Level1>
XML;
$xmlfile = '
<Level1>
<Level2>
<Level2Item VAR1="1" VAR2="2" ... />
<Level2Item VAR1="4" VAR2="5" ... />
<Level2Item VAR1="7" VAR2="8" ... />
</Level2>
</Level1>';