Sha*_*nig 2 php arrays sorting
我如何重新排序对象数组,如:
Array
(
[0] => stdClass Object
(
[term_id] => 3
[name] => Name
)
[1] => stdClass Object
(
[term_id] => 1
[name] => Name2
)
[2] => stdClass Object
(
[term_id] => 5
[name] => Name
)
)
Run Code Online (Sandbox Code Playgroud)
根据对象term_id,针对自定义的id数组:
$ order_by = array(5,3,1)
我现在使用的是下面的内容,但我觉得我没有利用PHP的一些高级排序功能......谁能告诉我什么会更好?
$sorted_terms = array();
$order_by = array( 5,3,1 );
foreach( $order_by as $id ) {
foreach ( $terms as $pos => $obj ) {
if ( $obj->term_id == $id ) {
$sorted_terms[] = $obj;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,您的术语在其排序顺序中的等级与其对应的ID的等级相同,后者恰好是数组中的$order_by数组键.因此我们只需要翻转该数组以获取ID到排名的映射,然后使用自定义比较函数对其进行排序.
这是一个应该有效的简单代码片段:
<?php
$skeys = array_flip($order_by);
usort($terms,
function($a,$b) use ($skeys){$a = $skeys[$a->term_id]; $b = $skeys[$b->term_id]; return $a - $b;});
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于PHP 5.3或更高版本.
这与5.3之前的PHP相同:
<?php
$skeys = array_flip($order_by);
function sfun($a,$b){
global $skeys;
$a = $skeys[$a->term_id]; $b = $skeys[$b->term_id]; return $a - $b;
}
usort($terms, "sfun");
Run Code Online (Sandbox Code Playgroud)
重要的功能是:
| 归档时间: |
|
| 查看次数: |
2545 次 |
| 最近记录: |