重新排序数组属性,然后在php中保存回XML

重新排序数组属性,然后在php中保存回XML,php,xml,arrays,sorting,Php,Xml,Arrays,Sorting,我有以下XML: <picture id="2"> <title>B</title> </picture> <picture id="3"> <title>C</title> </picture> <picture id="0"> <title>A</title> </picture> 它返回:数组([0

我有以下XML:

  <picture id="2">
    <title>B</title>
  </picture>
  <picture id="3">
    <title>C</title>
  </picture>
  <picture id="0">
    <title>A</title>
  </picture>
它返回:数组([0]=>0[1]=>2[2]=>3) 你知道如何像这样重新编制索引:0、1、2,并将适当的“id”属性保存回它们在XML文档中的正确位置吗


谢谢,Andy

XML
中,同一级别节点的顺序无关紧要,那么理论上,实践上,用户和其他库都无法做到这一点。

数字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;

我不明白你的答案。XML文档中节点的物理顺序是不相关的,这就是为什么我给了它们“id”属性,以便可以按照我选择的顺序显示它们。需要对id进行排序,使其为:0,1,2,3,4,5等,而不是0,1,3,4,6,9等。andy您描述的不是示例中所示的内容。在本例中,它们的图片顺序为1,2,0,这意味着您希望按标题中的字母对ID进行排序。请澄清您试图实现的目标,例如排序规则是什么。@Gordon感谢您的回答,我试图表明我没有按照xml文件中显示的顺序对xml进行排序,节点的顺序有些随机。id属性需要保持相同的数字顺序,但需要“重新索引”以使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);
$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;