2013-09-25 3 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» в каждом массиве первого массива. Я хочу сортировать первый массив, так что те массивы, у которых ключевое слово имеет значение, соответствующее элементу во втором массиве, появляются сначала, а остальные массивы появляются впоследствии без указания порядка. Как это сделать? Я использую 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

Все, что вы делаете, это копирование идентификаторов ключевых слов в другой массив. Вы ничего не разбираете. – Rob

Смежные вопросы