PHP SimpleXML Array_multisort () Вид работ - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть многомерный массив (стандартная стоимость RSS - канал - элемент - заголовок), и я пытаюсь отсортировать его по заголовку. Я использую SimpleXML и создал массив элементов из объектов SimpleXML. Затем я сделал еще один массив заголовков из массива items. Затем я отсортировал массив элементов по заголовку, используя array_multisort ().

Это своего рода работа. Есть 122 пункта. Сортировка размещает 2 элемента по порядку, затем 80 элементов по порядку, затем 38 элементов по порядку, затем 2 элемента по порядку. Я не уверен, почему он разделяет их на 4 группы.

XML:

<channel>
    <item>
        <title>Saved To Serve</title>
        <guid>http://www.moorelife.org/rss/SavedToServe.xml</guid>
        <pubDate>Sun, 06 Nov 2011 11:00:00 CST</pubDate>
    </item>
    <item>
        <title>Filled With All The Fullness Of God</title>
        <guid>http://www.moorelife.org/rss/FilledWithAllTheFullnessOfGod.xml</guid>
        <pubDate>Mon, 03 Oct 2011 19:00:00 CST</pubDate>
    </item>
</channel>

PHP:

<code><?php
$items = array();
foreach($data->channel->item as $item) {
    $items[] = $item;
}
$titles = array();
foreach($items as $item) {
    $titles[] = $item["title"];
}
array_multisort($titles, SORT_ASC, $items);
print "<pre>\n";
print_r($items);
print "
\ п "; ?>

В xml-файле «Сохранено на службу» находится прямо перед «Полностью исполненной Бога» (как в примере). Когда отсортировано, FWATFOG должен быть примерно за 50 пунктов до STS. В фактическом выводе STS # 2 и FWATFOG # 86 (в 3-й алфавитной группе).

Моя конечная цель - иметь возможность иметь ссылки для сортировки по заголовку или дате (желательно с AJAX, чтобы нам не приходилось иметь дело с перезагрузками страниц). Ребята, у вас есть идеи или предложения?

JJ

1 Ответ

0 голосов
/ 02 декабря 2011

Сначала вы можете напрямую отсортировать объекты simplexml:

$nodes = array(
    new SimpleXMLElement('<item>
        <title>Saved To Serve</title>
        <guid>http://www.moorelife.org/rss/SavedToServe.xml</guid>
        <pubDate>Sun, 06 Nov 2011 11:00:00 CST</pubDate>
    </item>
'),
    new SimpleXMLElement('<item>
        <title>Filled With All The Fullness Of God</title>
        <guid>http://www.moorelife.org/rss/FilledWithAllTheFullnessOfGod.xml</guid>
        <pubDate>Mon, 03 Oct 2011 19:00:00 CST</pubDate>
    </item>
')
);

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);
}

xsort($nodes, 'title', SORT_ASC);

print_r($nodes);
...