2015-12-03 6 views
0

Я пытаюсь заказать свой XML по дате, но код не работает. Вот мой кодUsort Date Xml PHP

$xml = simplexml_load_file ('http://xml.dsautoestoque.com/?l=09086369000133'); 
$arr=array(); 
foreach($xml->veiculo as $aTask) 
{ 
    $arr[]=$aTask; 

} 

usort($arr, function($a, $b) { 
    $ad = new DateTime($a['cadastro']); 
    $bd = new DateTime($b['cadastro']); 

    if ($ad == $bd) { 
    return 0; 
    } 

    return $ad > $bd ? 1 : -1; 
}); 

Я сделал, как этот

foreach($arr as $aTask) 
{ 
    $data1 = $aTask->cadastro; 
} 

Но не возвращается по дате, она возвращается этот 03/08/2015 18:22 24/11/2015 11 : 16 22/10/2015 17:36

+0

показать некоторые примеры дат, и убедитесь, что DateTime успешно разбора их. вы просто принимаете успех прямо сейчас. –

+0

Возможный дубликат [сортировка полей таблицы с использованием простых XML и xpath] (http://stackoverflow.com/questions/15604459/sorting-the-table-fields-using-simple-xml-and-xpath) – michi

+0

i have попробовал много примеров, но никто из них не работал хорошо –

ответ

0

Я думаю $a и $b имеют тип SimpleXMLElement и $a['cadastro'] и $b['cadastro'] являются null.

Итак, вы создаете свой DateTime как это new DateTime(null), и это будет соответствовать этой строке: if ($ad == $bd) {, и ваш массив не будет сортироваться.

Может быть, вы можете сделать это следующим образом:

$xml = simplexml_load_file ('http://xml.dsautoestoque.com/?l=09086369000133'); 

$arr = array(); 
foreach ($xml->veiculo as $aTask) { 
    $arr[] = $aTask; 

} 

usort($arr, function ($a, $b) { 
    $ad = DateTime::createFromFormat('d/m/Y H:i', $a->cadastro->__toString()); 
    $bd = DateTime::createFromFormat('d/m/Y H:i', $b->cadastro->__toString()); 

    if ($ad == $bd) { 
     return 0; 
    } 

    return $ad > $bd ? 1 : -1; 
}); 
+0

Спасибо, человек, ты спас мой день !!! теперь это хорошо работает –

Смежные вопросы