2013-09-25 85 views
0

我有用於保持5000左右的數組元素中,每個以下列格式的數組:如何根據PHP 5.3中另一個數組中的值對數組元素進行排序?

Array 
     (
      [keywordid] => 98 
      [keyword] => sample keyword 34 
      [type] => NATURAL 
      [longname] => UK 
     ) 

我有用於保持數字值如以下的第二陣列:

Array 
(
    [0] => 55 
    [1] => 56 
    [2] => 57 
    [3] => 58 
    [4] => 59 
    [5] => 1065 
    [6] => 1066 
    [7] => 1067 
    [8] => 1083 
) 

中的每個值上面的數組對應於第一個數組的每個數組 中的'keywordid'值。我想對第一個數組進行排序,以便那些keywordsid具有與第二個數組中的元素相匹配的值的數組首先出現,其餘數組之後以沒有指定的順序出現。我該如何做到這一點?我使用PHP 5.3,向後兼容性不是必需的。

欣賞幫助。

+0

什麼是預期的行爲,如果你有第二陣列中的重複? '[55,56,57,55]' – adlawson

+0

第二個數組中不會有重複。 – Sid

回答

2

我可能會使用usort

usort($array1, function($a, $b) use($array2) { 
    $k1 = array_search($a['keywordid'], $array2); 
    $k2 = array_search($b['keywordid'], $array2); 

    if ($k1 == $k2) { 
     return 0; 
    } 
    return ($k1 < $k2) ? -1 : 1; 
}); 

有可能是一個更好的辦法,但浮現在腦海第一。

+0

我將$ k1 <$ k2更改爲$ k1> $ k2,否則它們最後出現。編輯答案不會讓我編輯一個字符。 – Sid

+0

發現並非所有預期的元素都被排序到頂部,其中一個總是被遺漏。 – Sid

-1

試試這個代碼來操縱該數組:

<?php 
//here I assume you have more than one array 
$array = array (
      0=> array (
      "keywordid" => 98, 
      "keyword" => "sample keyword 34", 
      "type" => "NATURAL", 
      "longname" => "UK"), 
      1=> array (
      "keywordid" => 95, 
      "keyword" => "sample keyword 95", 
      "type" => "NATURAL 02", 
      "longname" => "US"), 
      2=> array (
      "keywordid" => 55, 
      "keyword" => "sample keyword 55", 
      "type" => "NATURAL 02", 
      "longname" => "AU") 

     ); 

//populate array into new variable 
foreach ($array as $key=> $val){ 
    $out[] = $val["keywordid"]; 
} 

echo "<pre>"; 
print_r($out); 
echo "</pre>"; 

?> 

輸出是:

Array 
(
    [0] => 98 
    [1] => 95 
    [2] => 55 
) 
+1

您所做的只是將關鍵字ID複製到另一個陣列。你沒有排序任何東西。 – Rob

相關問題