Intereting Posts
Как вернуть код HTTP 500 при любой ошибке, независимо от того, что как сохранить несколько изображений в таблице с помощью laravel php Как преобразовать массив в SimpleXML PHP Если else указывает, что запись в базе данных пуста, будет отображаться изображение по умолчанию Динамический родственный выбор с помощью jQuery, не работает в IE Хранить пути к файлам в базе данных Использовать PHP для доступа к LinkedIn API без входа пользователя Шифрование / Расшифровка строки между Java и PHP URL-код перезаписи для перезаписи Ошибка при попытке запустить HipHop в «режиме 2 (компиляция HipHop во временном каталоге и запуск скомпилированной программы из командной строки») Как загрузить параметры конфигурации Symfony из базы данных (Doctrine) Почему бесконечно рекурсивная функция в PHP вызывает segfault? Налоговый класс «Нулевая ставка» для каждой роли пользователя для определенных идентификаторов продукта Регулярные выражения: как выражать \ w без подчеркивания WooCommerce WordPress – примерная кнопка «Корзина»

Сортировка XML-файла в порядке возрастания с использованием php

У меня есть xml-файл, который содержит около 60 книг, которые мне нужно поместить в порядке возрастания из заемного счета, используя php, пока мой код показывает все книги, но не сортирует? любая помощь будет действительно одобрена

PHP

<?php $xmlassignDoc = new DOMDocument(); $xmlassignDoc->load("books.xml"); $books = $xmlBookDoc->getElementsByTagName("item"); foreach($books as $list) { $course = $list->getElementsByTagName("course"); $course = $course->item(0)->nodeValue; //HERE is where the GET function will be if ($course == "CC150") { print_r($array); $id = $list->getAttribute("id"); echo "<b>Book ID: </b> $id <br>"; $title = $list->getElementsByTagName("title"); $title = $title->item(0)->nodeValue; echo "<b>Title: </b> $title <br>"; $isbn = $list->getElementsByTagName("isbn"); $isbn = $isbn->item(0)->nodeValue; echo "<b>ISBN: </b> $isbn <br>"; $borrowed = $list->getElementsByTagName("borrowedcount"); $borrowed = $borrowed->item(0)->nodeValue; echo "<b>Borrowed Count: </b> $borrowed <br>"; echo "<br>"; } } //print $xmlBookDoc->saveXML(); ?> 

xml-файл

 <?xml version="1.0" encoding="utf-8"?> <bookcollection> <items> <item id="51390"> <title>Management of systems development /</title> <isbn>0091653215</isbn> <url>http://library.hud.ac.uk/catlink/bib/51390</url> <borrowedcount>45</borrowedcount> <courses> <course>CC140</course> <course>CC210</course> </courses> </item> <item id="483"> <title>Database systems management and design /</title> <isbn>0877091153</isbn> <url>http://library.hud.ac.uk/catlink/bib/483</url> <borrowedcount>28</borrowedcount> <courses> <course>CC140</course> </courses> </item> <item id="585842"> <title>E-learning skills /</title> <isbn>0230573126</isbn> <url>http://library.hud.ac.uk/catlink/bib/585842</url> <borrowedcount>5</borrowedcount> <courses> <course>CC157</course> </courses> </item> 

Мое решение:

 $books = array(); $xml = simplexml_load_file('books.xml'); foreach($xml->items->item as $item) { $books[] = array( 'id' => (string)$item->attributes()->id, 'title' => (string)$item->title, 'isbn' => (string)$item->isbn, 'course' => (string)$item->courses->course[0], 'borrowed_count' => intval($item->borrowedcount) ); } array_sort_by_column($books, 'borrowed_count'); var_dump($books); 

И функция сортировки:

 function array_sort_by_column(&$array, $column, $direction = SORT_ASC) { $reference_array = array(); foreach($array as $key => $row) { $reference_array[$key] = $row[$column]; } array_multisort($reference_array, $direction, $array); } 

file '1.php':

 <?php include 'books.php'; $b=new books(); $arr=$b->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':

 <?php class books { //load books from xml to array public function load($fname) { $doc=new DOMDocument(); if($doc->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()); } } ?>