La réponse sont deux boucles
poing vous recherchez le XPath pour l'ancien id, le stocker dans un tableau puis à nouveau en boucle pour remplacer les résultats stockés avec le nouvelle id
$reorder = array(9 => "8", 8 => "5", 7 => "4", 6 => "3", 5 => "0", 4 => "1", 3 => "9", 2 => "7", 1 => "2", 0 => "6");
$objDOM = new SimpleXMLElement(
'<pictures>
<picture id="9">id was 9, should be 8 now</picture>
<picture id="8">id was 8, should be 5 now</picture>
<picture id="7">id was 7, should be 4 now</picture>
<picture id="6">id was 6, should be 3 now</picture>
<picture id="5">id was 5, should be 0 now</picture>
<picture id="4">id was 4, should be 1 now</picture>
<picture id="3">id was 3, should be 9 now</picture>
<picture id="2">id was 2, should be 7 now</picture>
<picture id="1">id was 1, should be 2 now</picture>
<picture id="0">id was 0, should be 6 now</picture>
</pictures>');
$oldPicIds = array();
foreach ($reorder as $old => $new) {
$oldPicIds[$old] = $objDOM->xpath('picture[@id="' . $old . '"]');
}
foreach ($reorder as $old => $new) {
$oldPicIds[$old][0]['id'] = $new;
}
echo $objDOM->asXML();
sortie:
<?xml version="1.0"?>
<pictures>
<picture id="8">id was 9, should be 8 now</picture>
<picture id="5">id was 8, should be 5 now</picture>
<picture id="4">id was 7, should be 4 now</picture>
<picture id="3">id was 6, should be 3 now</picture>
<picture id="0">id was 5, should be 0 now</picture>
<picture id="1">id was 4, should be 1 now</picture>
<picture id="9">id was 3, should be 9 now</picture>
<picture id="7">id was 2, should be 7 now</picture>
<picture id="2">id was 1, should be 2 now</picture>
<picture id="6">id was 0, should be 6 now</picture>
</pictures>
pour enregistrer un tableau, vous pouvez utiliser array_pop
pour obtenir la dernière occurrence de picture @ id = xy. qui devrait être celui recherché (lire les commentaires des inconvénients)
$reorder = array(9 => "8", 8 => "5", 7 => "4", 6 => "3", 5 => "0", 4 => "1", 3 => "9", 2 => "7", 1 => "2", 0 => "6");
$objDOM = new SimpleXMLElement(
'<pictures>...</pictures>');
foreach ($reorder as $old => $new) {
$picture = $objDOM->xpath('picture[@id="' . $old . '"]');
$picture = array_pop($picture);
$picture['id'] = $new;
}
echo $objDOM->asXML();
Avez-vous omis quelque chose dans le code que vous avez collé? – tplaner