2010-11-11 58 views
1

我有这样的XML:重新排序阵列属性然后保存回XML在PHP

<picture id="2"> 
    <title>B</title> 
    </picture> 
    <picture id="3"> 
    <title>C</title> 
    </picture> 
    <picture id="0"> 
    <title>A</title> 
    </picture> 

努力实现这一点:

<picture id="1"> 
    <title>B</title> 
    </picture> 
    <picture id="2"> 
    <title>C</title> 
    </picture> 
    <picture id="0"> 
    <title>A</title> 
    </picture> 

以此来获得的“id”属性值的列表:

$objXML = new SimpleXMLElement(XML_FILE_NAME, null, true); 
$picture = $objXML->xpath('picture'); 
$arrayCurrent = array(); 
foreach($picture as $value) { 
    $arrayCurrent[] = (string)$value['id']; 
} 
sort($arrayCurrent); // put XML into numerical 'id' order 
print_r($arrayCurrent); 

它返回:阵列([0] => 0 [1] => 2 [2] => 3) 任何想法如何重新索引像这样:0,1 ,2并将相应的'id'属性保存回其在XML文档中的正确位置?

谢谢,安迪

回答

0

数字ID为了保持并连续做:

$objXML = new SimpleXMLElement(XML_FILE_NAME, null, true); 
$picture = $objXML->xpath('picture'); 
usort($picture, create_function('$a,$b', 'return (string)$a["id"] - (string)$b["id"];')); 
foreach ($pictures as $index => $node) $node["id"] = $index; 
0

在同一水平XML序节点是无所谓的,那么你可以不受理论做到这一点,通过实践用户的其他库。

+0

我不明白你的答案。 XML文档中节点的物理顺序是不相关的,这就是为什么我给了它们'id'属性,所以我可以按照我选择的顺序显示它们。 ID的需要排序,以便他们去:0,1,2,3,4,5等没有差距,而不是0,1,3,4,6,9等 – Andy 2010-11-11 18:14:40

+0

@andy你描述的不是什么在示例中显示。在这个例子中,他们的图片被排序为1,2,0,这意味着你想要用标题中的字母对ID进行排序。请说明您想要达到的目标,例如排序的规则是什么。 – Gordon 2010-11-11 20:28:14

+0

@戈登感谢您的回复,我试图表明,我没有对xml进行排序,因为它出现在xml文件中,节点的排列顺序是随机的。 id属性需要保持相同的数字顺序,但是“重新编制索引”以使id号码连续。 – Andy 2010-11-11 20:39:43