2013-09-25 59 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

相关问题