0

我有 2 个数组,1 个保存要显示的数据,另一个保存订单。

以下数组将在 foreach 循环中使用以显示:

array(
   [Posts] =>
            [0] =>
                 id => 7
                 content => 'some content'
            [1] =>
                 id => 3,
                 content => 'some other content'
            [2] =>
                 id => 4,
                 content => 'some more content'
            [3] =>
                 id => 2,
                 content => 'some irrelevant content'
)

此数组包含排序位置:

array(
   2, 4, 7, 3
)

我想根据关联数组中的值对第一个数组进行排序,其中键是与第二个数组匹配的 id。

预期输出:

array(
   [Posts] =>
            [0] =>
                 id => 2,
                 content => 'some irrelevant content'
            [1] =>
                 id => 4,
                 content => 'some more content'
            [2] =>
                 id => 7
                 content => 'some content'
            [3] =>
                 id => 3,
                 content => 'some other content'
)
4

2 回答 2

4

如果源数组键等于 Ids,你会大大帮助自己。那会加快速度。但是现在这将使您的源数据根据您的排序数组值排序):

$res = array();
foreach( $sortArray as $sortId ) {
   foreach( $srcArray as $item ) {
      if( $item['id'] == $sortId ) {
         $res = $item;
         break;
      }
   }
}

编辑

如果您将 Id 用作键,那么 secondforeach()将没有用:

$res = array();
foreach( $sortArray as $sortId ) {
   $res[] = $srcArray[ $sortId ];
}
于 2012-12-14T12:41:10.830 回答
1

该解决方案使用usort

$sarray = array(2, 4, 7, 3);
$sarray = array_flip($sarray);

usort($posts, function($a, $b) use($sarray) {
    // TODO: check if the array-index exists ;)
    $index_a = $sarray[$a['id']];
    $index_b = $sarray[$b['id']];

    return $index_a - $index_b;
});

var_dump($posts);

由于我使用的是闭包,因此您需要 PHP 5.3 才能像这样使用它。如果您需要 5.2 兼容性,您可能必须使用create_function.

于 2012-12-14T12:45:40.147 回答