【发布时间】:2013-02-01 20:56:25
【问题描述】:
我有一个对象,它是对象的集合,表现得像一个数组。它是一个数据库结果对象。类似于以下内容:
$users = User::get();
foreach ($users as $user)
echo $user->name . "\n";
$users 变量是实现ArrayAccess 和Countable 接口的对象。
我想对这个“数组”进行排序和过滤,但我不能在上面使用数组函数:
$users = User::get();
$users = array_filter($users, function($user) {return $user->source == "Twitter";});
=> Warning: array_filter() expects parameter 1 to be array, object given
我如何对这种对象进行排序和过滤?
【问题讨论】:
-
似乎 user::get() 函数没有返回数组...检查它是否返回数组
-
你最好的选择可能是在你的用户对象上实现一个“toArray”方法。
-
ArrayAccess 和 Countable 不足以遍历所有元素,您仍然需要知道键。在我看来,调整
User::get()以接受有关所请求用户类型的附加信息是可行的方法。排序和过滤之类的事情是基于数据的任务,因此最好由数据库来完成。 -
如果是 SQL 结果集,为什么不让 SQL 为您进行排序?
-
@GordonM:因为有时过滤和排序功能对于 SQL 来说有点太复杂了,我不想在我的数据库中乱扔程序,这些东西属于应用程序逻辑,例如数据库模型。
标签: php arrays spl arrayaccess countable