【问题标题】:PHP SimpleXML Array_multisort() Kind Of WorksPHP SimpleXML Array_multisort() 类型的作品
【发布时间】:2011-12-02 07:37:30
【问题描述】:

我有一个多维数组(标准 RSS 票价 - 频道 - 项目 - 标题),我正在尝试按标题对其进行排序。我正在使用SimpleXML 并从 SimpleXML 对象中创建了一个项目数组。然后我从 items 数组中制作了另一个标题数组。然后我使用 array_multisort() 按标题对 items 数组进行排序。

这是一种工作。有 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:

<?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 "</pre>\n";
?>

在 xml 文件中,Saved To Serve 就在 Filled With All The Fullness Of God 之前(就像示例一样)。排序时,FWATFOG 应该是 STS 之前的 50 项左右。在实际输出中,STS 为#2,FWATFOG 为#86(在第 3 个字母分组中)。

我的最终目标是能够拥有按标题或日期排序的链接(最好使用 AJAX,这样我们就不必处​​理页面重新加载)。大家有什么想法或建议吗?

JJ

【问题讨论】:

  • 显然,这里还有其他事情在起作用。我尝试做 SORT_DESC 以及创建其他数组 ($pubDates[] = $item["pubDate"];) 并且所有内容都以相同的顺序输出。它输出不同的唯一时间是如果我输入了错误的值,它会按照 xml 的方式进行排序。

标签: php arrays multidimensional-array simplexml


【解决方案1】:

您可以先直接对simplexml对象进行排序:

$节点=数组( 新的 SimpleXMLElement('保存服务 http://www.moorelife.org/rss/SavedToServe.xml2011 年 11 月 6 日星期日 11:00:00 CST项目> '), 新的 SimpleXMLElement('充满了神一切的丰盛 http://www.moorelife.org/rss/FilledWithAllTheFullnessOfGod.xml2011 年 10 月 3 日星期一 19:00:00 CST项目> ') ); 函数 xsort(&$nodes, $child_name, $order = SORT_ASC) { $sort_proxy = 数组(); 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);

【讨论】:

  • 这对我不起作用(空白页)。值得一提的是,我正在使用 php4,将 simplexml 用于 php4 类 (phpclasses.org/package/…)。我没想提它,因为它不是问题。它似乎以相同的方式处理对象。我知道它不支持 xpath 或通配符,所以它可能不适用于 $node->$child_name 或其他东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多