file '1.php':
load('books.xml'); //1. load books from xml to array
usort($arr, array('books','cmp')); //2. sort array
$b->save('out.xml',$arr); //3. save array to xml
?>
file 'books.php':
load($fname)) $res=$this->parse($doc);
else throw new Exception('error load XML');
return $res;
}
static public function cmp($a, $b)
{
if ($a['fields']['borrowedcount'] == $b['fields']['borrowedcount']) {
return 0;
}
return ($a['fields']['borrowedcount'] < $b['fields']['borrowedcount']) ? -1 : 1;
}
private function parse($doc)
{
$xpath = new DOMXpath($doc);
$items = $xpath->query("items/item");
$result = array();
foreach($items as $item)
{
$result[]=array('id'=>$item->getAttribute('id'), 'fields'=>$this->parse_fields($item));
}
return $result;
}
private function parse_fields($node)
{
$res=array();
foreach($node->childNodes as $child)
{
if($child->nodeType==XML_ELEMENT_NODE)
{
$res[$child->nodeName]=$this->get_value($child);
}
}
return $res;
}
private function get_value($node)
{
if($node->nodeName=='courses')
{
$res=array();
foreach($node->childNodes as $child)
{
if($child->nodeType==XML_ELEMENT_NODE)
{
$res[]=$child->nodeValue;
}
}
return $res;
}
else
{
return $node->nodeValue;
}
}
//save array to xml
public function save($fname, $rows)
{
$doc = new DOMDocument('1.0','utf-8');
$doc->formatOutput = true;
$bc = $doc->appendChild($doc->createElement('bookcollection'));
$items = $bc->appendChild($doc->createElement('items'));
foreach($rows as $row)
{
$item=$items->appendChild($doc->createElement('item'));
$item->setAttribute('id',$row['id']);
foreach($row['fields'] as $field_name=>$field_value)
{
$f=$item->appendChild($doc->createElement($field_name));
if($field_name=='courses')
{
foreach($field_value as $course_val)
{
$course=$f->appendChild($doc->createElement('course'));
$course->appendChild($doc->createTextNode($course_val));
}
}
else
{
$f->appendChild($doc->createTextNode($field_value));
}
}
}
file_put_contents($fname, $doc->saveXML());
}
}
?>