2012-12-14 50 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

相關問題