gpt4 book ai didi

php - 在 PHP 中按自定义顺序重新排列对象数组

转载 作者:行者123 更新时间:2023-12-03 19:48:23 25 4
gpt4 key购买 nike

我将如何重新排序对象数组,例如:

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");

重要的功能是:

关于php - 在 PHP 中按自定义顺序重新排列对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com