2012-12-14 29 views
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 
) 

我想基于所述vaulue第一阵列排序在关键字是与第二个数组相匹配的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' 
) 

回答

3

你会显著帮助自己,如果源数组键将等于IDS。这会加快速度。但现在这将使您的源数据下令accoring您排序数组值):

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

编辑

如果你已经标识作为密钥,然后第二foreach()是没有用的:

$res = array(); 
foreach($sortArray as $sortId) { 
    $res[] = $srcArray[ $sortId ]; 
} 
+0

因此,可以说我自己通过srcArray循环并设置键= id的值。然后源数组键将等于id。你能告诉我你心里想的更快吗? –

+0

见编辑答案 –

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

相关问题