2013-02-25 3 views
4
$original_ids = array(1, 2, 3, 4); //<--- Original values without sorted. 
$sorted_ids = array(4, 1, 3); //<--- Fixed values (sort by this) 
$result_ids = array(); //<--- The result array after sorted 

Je veux juste revérifier tableau adapté et trier $sorted_ids (si vous comprenez)personnalisés de tri de tableaux

$ result_ids doit être ... array(4, 1, 3, 2) (est pas dans la gamme de $ si mettre en dernier)

Je lié à un code comme ...:

foreach ($sorted_ids as &$id) { 
    if (in_array($id , $original_ids)) { 
     $result_ids[] = $id; 
    } else { 

    } 
} 

Mais je n'ai aucune idée de la façon de pousser les tableaux non-appariés à la fin du tableau $ result_ids.

Commentaire si vous ne comprenez pas.

Répondre

1
$result_ids = array_merge(
    array_intersect($sorted_ids, $original_ids), // the values that match sorter 
    array_diff($original_ids, $sorted_ids)  // append the rest 
); 
1
foreach ($sorted_ids as $id) { 
    if (in_array($id , $original_ids)) { 
     $result_ids[] = $id; 
    } else { 
     $addToEnd[] = $id 
    } 
} 

array_merge($result_ids, $addToEnd); 

Votre utilisation &$id est insensée BTW, parce que vous appuyez sur sa valeur. Vous n'avez pas besoin de référence.

+0

Ohhhh merci pour l'idée: D – l2aelba

0
$original_ids = array(1, 2, 3, 4); 
$sorted_ids = array(4, 1, 3); 
foreach($original_ids as $key=>$val){ 
    if(in_array($val,$sorted_ids)){ 
     unset($original_ids[$key]); 
    } 
} 

$result_ids = array_merge($sorted_ids,$original_ids); 

print_r($result_ids); 
1
array_merge($sorted_ids, array_diff($original_ids, $sorted_ids)) 
+0

Notez que cela ajoutera également valeurs qui sont présentes dans le trieur, mais pas dans le tableau original –

+0

Euh je ne vous ai pas compris, alors vous une utilisation array_intersect dans array_merge – sanj

0

vous pouvez utiliser ce code:

<?php 

foreach ($sorted_ids as &$id) { 
    if (sort($id)) { 
     $result_ids[] = $id; 
    } else { 

    } 
} 

?> 

il fera exactement ce dont vous avez besoin