[英]Parsing multiple XML feeds with PHP into one sorted array
我想創建一個類似於的可排序列表
數據來自多個相同的結構化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) {
array_push($VAR1Array, $result['VAR1']);
array_push($VAR2Array, $result['VAR2']);
//... etc etc
}
//sort
//$sortedArray = sort($VAR1Array);
產量
Array(
[0] => SimpleXMLElement Object([0] => 1)
[1] => SimpleXMLElement Object([0] => 4)
[2] => SimpleXMLElement Object([0] => 7)
)
從這個XML結構中,將數據存儲在一個數組中的最佳方法是什么? 我希望能夠將所有數據收集到一個數組中,以便我可以通過一個或兩個VAR對其進行排序並顯示結果。
我不太確定你要做什么樣的排序(你應該用一些例子來說明)。 但最佳的是,您不會將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
}
最后, sort()
通過引用工作,所以不要將它等同於一個變量(即只是說sort($array);
作為整行,然后$array
將被排序。如果你像我一樣轉換為int
在上面的例子中,你可以使用php的默認排序函數,而不像其他人建議的那樣使用用戶定義的比較函數。而array_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 = '
<Level1>
<Level2>
<Level2Item VAR1="1" VAR2="2" ... />
<Level2Item VAR1="4" VAR2="5" ... />
<Level2Item VAR1="7" VAR2="8" ... />
</Level2>
</Level1>';
如果我是你,我只需將所有的SimpleXMLElements推送到一個數組上,然后使用帶有自定義回調函數的uasort()來根據需要進行排序。 那樣有用嗎?
$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.'")'));
如果你願意的話,你也可以保留SimpleXMLElements並直接對它們進行排序,就像apinstein所說的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.