これを行うことができるより良い方法があるかどうか疑問に思っています。フィードから XML を読み取り、ノードを並べ替え (作成者が作成できないため...)、JSON として返します (これは AJAX 呼び出しであり、JavaScript で XML を解析するのは面倒なので)。
How to sort a multi-dimensional XML file? にあるNev Stokes の素晴らしい xsort 関数を使用しています。、しかし、ソートされた XML を json でエンコードするときに問題が発生しました (JSON として JavaScript に戻っていませんでした)。
私がそれを回避した方法はかなり汚いので、もっと良い解決策があるかどうか疑問に思っています. $jobs 文字列が '{"Job": [xxx] }' ラッパーを必要とするという点でのみ、json_encode($xml) の印刷が json_encode($jobs) と異なることがわかりました。うまくいきました...しかし、それはとても間違っていると感じています!
私のPHPコードは以下です。誰かがもっとエレガントなソリューションを持っているかどうか知りたいです!
// curls in rss feed
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://overdriveinteractive.applicantstack.com/feed/jobs");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
// loads xml
$xml = simplexml_load_string($output, 'SimpleXMLElement', LIBXML_NOCDATA);
// adds timestamp date field for sorting
foreach($xml->Job as $job) {
$job->addChild('date', strtotime($job->DateCreated));
}
// sorts xml
$jobs = $xml->xpath('/Openings/Job');
xsort($jobs, 'date', SORT_DESC);
echo '{"Job":' . json_encode($jobs) . '}';
function xsort(&$nodes, $child_name, $order=SORT_ASC) {
$sort_proxy = array();
foreach ($nodes as $k => $node) {
$sort_proxy[$k] = (string) $node->$child_name;
}
array_multisort($sort_proxy, $order, $nodes);
}