Intereting Posts

Как отсортировать XML-канал с помощью SimpleXML

Я начал использовать функцию simplexml, которая, кажется, работает лучше, чем предыдущий другой парсер, который я пытался использовать. Я попал на сцену, где мне нужно сортировать элементы по передаче – я попытался использовать uasort, но не вносил никаких изменений в порядок элементов.

также несколько раз программа работает не один раз в тот же день – было бы проще сортировать видеоид может любая помощь?

это выглядит так:

[0] => SimpleXMLElement Object ( [VideoID] => 108059 [Genre] => Music [ProgrammeName] => MTV [OriginalAiringDate] => 2009-11-10T19:22:24 [TransmissionDate] => 2009-11-10T19:22:24 ) [1] => SimpleXMLElement Object ( [VideoID] => 108395 [ExpiryDate] => 2009-12-12T23:59:59 [DateCreated] => 2009-11-12T13:28:54 [Genre] => Music [ProgrammeName] => MTV [OriginalAiringDate] => 2009-11-12T19:22:32 [TransmissionDate] => 2009-11-12T19:22:32 ) $xml = simplexml_load_file("data.xml"); $count = 0; $sortItem = 0; $dateformat = "D j M, g:ia"; $sortArray = array(); foreach($xml->CatchUp as $item){ $sortArray[$count][TransmissionDate] = $item; if($count < 4){ print "<p>Programme Name:<strong> " . $item->ProgrammeName. "</strong></p>"; print "<p>Date Shown:<strong> " . date($dateformat, strtotime($item->TransmissionDate)). "</strong></p>"; print "<p>Description:<strong> " . trunc($item->ShortSynopsis,30, " ")."</strong></p>"; print "<p><a href='". $item->VideoID. "'>". $item->VideoID."</a></p>"; $count++; } } 

}

asort ($ sortArray);

Я вижу два способа сделать это. Первым было бы создать массив, содержащий значения TransmissionDate , затем еще один массив, содержащий соответствующие узлы, а затем использовать array_multisort() . Это немного утомительно, поэтому вот что я сделал бы вместо этого: загрузите SimpleDOM и используйте sortedXPath()

 include 'SimpleDOM.php'; $xml = simpledom_load_file("data.xml"); $dateformat = "D j M, g:ia"; foreach($xml->sortedXPath('CatchUp[ProgrammeName="MTV"]', 'TransmissionDate') as $i => $item) { if ($i == 4) { // I assume you only want the first 4 break; } print "<p>Programme Name:<strong> " . $item->ProgrammeName. "</strong></p>"; print "<p>Date Shown:<strong> " . date($dateformat, strtotime($item->TransmissionDate)). "</strong></p>"; print "<p>Description:<strong> " . trunc($item->ShortSynopsis,30, " ")."</strong></p>"; print "<p><a href='". $item->VideoID. "'>". $item->VideoID."</a></p>"; } 

попробуйте использовать кастинг при извлечении данных из объекта SimpleXMLElement

используя идентификатор видео: $sortArray[$count][VideoID] = (int)$item;