两个php数组 - 使用另一个数组的值排序一个数组

Tis*_*sch 7 php arrays wordpress

我有两个PHP数组,如下所示:

  1. 包含Wordpress帖子ID的X记录数组(按特定顺序)
  2. 一系列Wordpress帖子

这两个数组看起来像这样:

Array One(Wordpress Post ID的排序自定义数组)

Array (  
  [0] => 54
  [1] => 10
  [2] => 4
)
Run Code Online (Sandbox Code Playgroud)

数组二(Wordpress Post Array)

Array ( 
    [0] => stdClass Object
        (
            [ID] => 4
            [post_author] => 1
    )
    [1] => stdClass Object
        (
            [ID] => 54
            [post_author] => 1
    )
    [2] => stdClass Object
        (
            [ID] => 10
            [post_author] => 1
    )
)
Run Code Online (Sandbox Code Playgroud)

我想按照第一个数组中ID的顺序对wordpress帖子的数组进行排序.

我希望这是有道理的,并且在任何帮助之前都要感谢.

汤姆

编辑:服务器正在运行PHP 5.2.14版

lon*_*day 10

这应该很容易使用usort,它使用用户定义的比较函数对数组进行排序.结果可能如下所示:

usort($posts, function($a, $b) use ($post_ids) {
    return array_search($a->ID, $post_ids) - array_search($b->ID, $post_ids);
});
Run Code Online (Sandbox Code Playgroud)

请注意,此解决方案,因为它使用匿名函数和闭包,需要PHP 5.3.


这个5.3之前(黑暗时代!)的一个简单解决方案是通过快速循环执行此操作然后ksort:

$ret = array();
$post_ids = array_flip($post_ids);
foreach ($posts as $post) {
    $ret[$post_ids[$post->ID]] = $post;
}
ksort($ret);
Run Code Online (Sandbox Code Playgroud)

  • 对于5.3之前的解决方案,您可以使用array_flip()而不是array_search,这对于排序大型列表会更好 (2认同)