2013-09-25 5 views
0

j'ai un tableau qui contient environ 5000 éléments de réseau, chacun dans le format suivant:Comment faire pour trier un tableau d'éléments de tableau basé sur les valeurs d'un autre tableau dans PHP 5.3?

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

I ont une seconde matrice qui contient des valeurs numériques telles que les suivantes:

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

Chaque valeur le tableau ci-dessus correspond à la valeur 'keywordid' dans chaque tableau du premier tableau. Je veux trier le premier tableau, de sorte que les tableaux dont le mot-clé a une valeur correspondant à un élément du second tableau apparaissent en premier et le reste des tableaux apparaissent ensuite sans ordre spécifié. Comment puis-je accomplir cela? J'utilise PHP 5.3, la rétrocompatibilité n'est pas une exigence.

Appréciez l'aide.

+0

Quel est le comportement attendu si vous avez des doublons dans le second tableau? '[55, 56, 57, 55]' – adlawson

+0

Il n'y aura pas de doublons dans le second tableau. – Sid

Répondre

2

J'utiliserions probablement 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; 
}); 

Il y a probablement une meilleure façon, mais qui est venu à l'esprit en premier.

+0

J'ai changé $ k1 <$ k2 à $ k1> $ k2 sinon ils apparaissent en dernier. Modifier la réponse ne me laisserait pas éditer un seul personnage. – Sid

+0

Découvert que tous les éléments attendus ne sont pas triés vers le haut, il est toujours manqué. – Sid

-1

essayer ce code pour manipuler ce tableau:

<?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>"; 

?> 

la sortie est:

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

Tout ce que vous faites est de copier les identifiants de mots-clés dans un autre tableau. Vous ne triez rien. – Rob

Questions connexes