【问题标题】:Php list to be sortet alphabetically [duplicate]PHP列表按字母顺序排序[重复]
【发布时间】:2012-06-16 07:52:02
【问题描述】:

可能重复:
How should I sort this array by key with usort?

我尝试按照很多提示在这段代码上按字母顺序对列表进行排序,但没有成功。

<?php
foreach ($this->link_items as &$item) :
?>
<li>
<a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catid)); ?>">
            <?php echo $item->title; ?></a>
</li>
<?php endforeach; ?>

我需要在输出之前对这个列表进行排序。

【问题讨论】:

标签: php alphabetical alphabetical-sort


【解决方案1】:
sort($this->link_items);

这将按值对值进行排序。要按键排序,请使用ksort

【讨论】:

  • $link_items 是对象,所以这不起作用。 OP 需要使用usort 并比较项目标题。
  • 他实际上并没有在他的问题中提到这一点。我根据他提供的信息工作。这真的需要投反对票吗?
  • 鉴于 OP 首先执行 foreach ($this-&gt;link_items as &amp;$item) 然后访问 $item-&gt;title 和其他属性,因此问题相当明显。至于 dv,嗯,从技术上讲,答案是错误的,所以是的,但它更多的是为了鼓励你纠正问题(而不是惩罚你)。
  • 可以用面向对象的方法读取数组,就像他在这里所做的那样。没有什么说它不能是他正在排序的数组。
  • 奥卡姆剃刀:对两个相互竞争的理论最明显的解释通常是正确的解释,$item-&gt;title 暗示了一个对象属性。此外,如果 OP 不知道如何按属性对对象列表进行排序,他/她可能也不知道如何使用 ArrayObject(不是数组)。
【解决方案2】:

使用:

$sorted_array = array_multisort($this->link_items, SORT_ASC);
<?php
foreach ($sorted_array as &$item) :
?>
<li>
<a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catid)); ?>">
            <?php echo $item->title; ?></a>
</li>
<?php endforeach; ?>

【讨论】:

  • array_multisort 返回一个布尔值。即使它返回排序后的数组,结果也可能是错误的,因为对象有多个属性。
猜你喜欢
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2017-06-11
  • 2017-08-20
  • 2014-12-21
  • 1970-01-01
相关资源
最近更新 更多