如何按照对象的一个字段(例如name或count )对此对象数组进行排序?
阿拉伊
(
[0]=STD class对象
(
[ID]=1
[name]=pcdjy的重要花生
[count]=420
)
[1]=STD class对象
(
[ID]=2
[name]=杰尼斯
[count]=234
)
[2]=STD class对象
(
[ID]=3
[name]=gsdbb
[count]=4354
)
.
#1楼
这是比使用闭包更好的方法
usort($your_data,function ) ($a,$b ) ) )。
{
returnstrcmp($a-name,$b-name );
);
这在PHP文档中没有,但是如果使用的是5.3闭包,则可以指定可调用的参数。
#2楼
如果使用的是php oop,则必须进行以下更改:
公共静态函数CMP ($ a,$b )
{
returnstrcmp($a-name,$b-name );
}
//inthiscasefunction _ namewouldbecmp
usort($your_data,Array ) (your_class_name ),) FUNCTION_NAME );
#3楼
如果需要基于本地的字符串比较,可以使用strcoll代替strcmp。
请注意,如果需要,请首先将setlocale与LC_COLLATE一起使用以设置区域设置信息。
usort($your_data,function ) $a,$b
setlocale(LC_collate,' pl_PL.UTF-8 ' ); //exampleofpolishlanguagecollation
returnstrcoll($a-name,$b-name );
);
#4楼
在Codeigniter中使用此方法时,可以使用以下方法:
usort($jobs,Array ) $this-job_model,' sortJobs ' ); //function inside模式
usort($jobs,Array ) $this,' sortJobs ' );//写入内建控制器。
谢谢您的建议@rmooney。 真的对我有帮助。
#5楼
如果只是按一个字段排序,则usort是个好选择。 但是,如果需要按多个字段进行排序,解决方案很快就会混乱。 在这种情况下,可以使用YaLinqo库*为数组和对象实现查询语法,如SQL。 在所有情况下,它都有漂亮的语法:
$sortedbyname=from($objects )-orderby ) ' $v-name ' );
$sortedbycount=from($objects )-orderby ) ' $v-count ' );
$ sortedbycountandname=from ($ objects )-order by ($ v-count ) )-thenby ) $v-name );
其中' $v-count '是函数($ v ) { return $v-count; )的简称。 function($v ) { return $v-count; }function($v ) ) { return $v-count; (可以全部使用。 这些方法链返回迭代器,但如果需要,可以在末尾添加-toArray )以获取数组。
*我来开发