我将如何重新排序对象数组,例如:
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
)
)
根据对象 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;
}
}
}
最佳答案
基本上,您的术语在排序顺序中的排名与其对应的 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;});
以上代码适用于 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");
重要的功能是:
- > array_flip
- > usort
关于php - 在 PHP 中按自定义顺序重新排列对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692687/