У меня есть виджет новостей, который использует DOM Xml для вывода нескольких XML-файлов для отображения. Я пытаюсь выяснить, как получить статьи для отображения в порядке по дате. Вот код для виджета:Сортировка нескольких файлов XML по дате
$dh = opendir('./xml/');
$fileCount = 0;
while ($file = readdir($dh) and $fileCount < 3) {
if (preg_match("/^..?$/", $file)) {
continue;
}
$open = "./xml/".$file;
$xml = domxml_open_file($open);
//we need to pull out all the things from this file that we will need to
//build our links
$root = $xml->root();
$stat_array = $root->get_elements_by_tagname("status");
$status = extractText($stat_array);
$date_array = $root->get_elements_by_tagname("date");
$date = extractText($date_array);
$ab_array = $root->get_elements_by_tagname("abstract");
$abstract = extractText($ab_array);
$h_array = $root->get_elements_by_tagname("headline");
$headline = extractText($h_array);
$img_array = $root->get_elements_by_tagname("image");
$image = extractText($img_array);
$lead_array = $root->get_elements_by_tagname("para-intro");
$para["intro"] = extractText($lead_array);
if ($status != "live") {
continue;
}
echo "<div class=\"col-md-12 newsbox\"><img style=\"margin-bottom: 10px;\" width=\"100%\" src=\"images/news/".$image."\"><div class=\"newsboxtext\"><a href=\"showArticle.php?file=".$file. "\"><h2 class=\"mainheadline2\"> ".$headline . "</h2></a><a href=\"showArticle.php?file=".$file . "\"><button style=\"margin-top:5px;\" type=\"button\" class=\"btn btn-sm btn-default\">+ Read More</button></a></div><hr class=\"linedivider\">
</div>";
$fileCount++;
}
И это то, что я использую, чтобы попробовать и сортировать результаты:
function date_compare($a, $b)
{
$date1 = strtotime($a['date']);
$date2 = strtotime($b['date']);
return $date1 - $date2;
}
usort($file, 'date_compare');
, но я получил эту ошибку. Внимание: usort() ожидает параметр 1, чтобы быть массивом, нуль приведены в
$ file в этом случае является дескриптором, а не массивом. Вы можете создать массив в вашем цикле while array [] = $ file; и это должно сработать. –
Пробовал, что. Теперь я получаю эту ошибку: не удается redeclare date_compare() – tokked13
Сначала проверьте, что $ file является массивом, и это то, что вы ожидаете. Эта ошибка означает, что функция уже объявлена так, либо она уже была объявлена где-то в вашей программе, либо, скорее всего, она находится внутри вашей петли? –