【问题标题】:sorting a strange array of objects in PHP在 PHP 中对奇怪的对象数组进行排序
【发布时间】:2013-12-09 02:44:45
【问题描述】:

我在这里编辑别人的代码:

foreach($list as $items) {
   // displays items names and images etc
}

在 foreach() 循环中,我可以看到名称:

echo $items[0]->name

看看 $items 的内容是这样的:

Array ( [0] => stdClass Object ( [id] => 7 [name] => Bench Scales // ..etc..

但我似乎无法在循环之外引用名称

$list[0]->name // doesn't work

所以我在尝试按名称排序时有点卡住了,是的,我已经查找了 usort() 并对按名称排序的概念感到满意,但是无法对这个对象数组进行排序?按名字。欢迎任何帮助

在 foreach() 循环之上,我尝试了类似的方法,但没有成功:

function cmp($a,$b) { return strcmp($a->name, $b->name); }
usort($list,"cmp");

【问题讨论】:

  • $list[0]->name$items[0]->name 不同。为什么你认为它们可以互换?
  • 顺便说一句,在循环中您使用的是$items[0]->name 和比较函数 - $a->name。是什么让您认为 [0] 是可选元素?
  • Leemo 的回答在下面帮助我参考了它,有点傻,今天我的大脑被关闭了:/ - 代码包含在我的评论中,位于他的回答下方。谢谢你们的帮助

标签: php arrays sorting object


【解决方案1】:

这个例子:

$list[0]->name; // doesn't work

不应该工作请记住,当您在 foreach 中时,当您访问诸如 $item 之类的可迭代对象时,您是一个嵌套级别。因此

假设数组具有数字索引并且$list 中的第 0 个值是一个可以工作的对象:

$list[0][0]->name;

【讨论】:

  • 您假设$list 具有基于数字的连续索引
  • 正是...我应该在回答正文中澄清
  • 啊,我有点脑残,你的权利,$list[0][0]->name 和 $list[x][0]->name 会起作用,所以当我运行 $通过代码排序列出:更改如下: function cmp($a,$b) { return strcmp($a[0]->name, $b[0]->name); } usort($list,"cmp");非常感谢!
【解决方案2】:

对我来说(我现在有点累)这看起来不像是一个排序问题。 $list 是一个集合(显然),当您通过 foreach 循环运行它时,每次迭代都会为您提供一个可以使用的对象数组,这就是您的第一个示例有效的原因。 $list 是一个数组数组,所以你需要多一层“访问”才能得到你想要的。

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 2010-12-04
    • 1970-01-01
    • 2019-08-31
    • 2011-01-18
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多