2011-08-17 4 views

Répondre

7

Voici un code rude pour vous aider à démarrer:

En fait, il semble à la première lettre de chaque mot dans le tableau de données, les contrôles de sa position dans le tableau $sortOrder. Les lettres qui ne sont pas en $sortOrder sont placées à la fin dans l'ordre apparaissent.

Dès le départ, cela va se casser si $sortOrder a plus de 100 000 articles. Il y a probablement d'autres trous aussi mais je pense que c'est un exemple assez décent de la façon dont fonctionne usort().

<?php 
function getSortOrder($c) { 
    $sortOrder = array("j","c","z","l","a"); 
    $pos = array_search($c, $sortOrder); 

    return $pos !== false ? $pos : 99999; 
} 

function mysort($a, $b) { 
    if(getSortOrder($a[0]) < getSortOrder($b[0])) { 
     return -1; 
    }elseif(getSortOrder($a[0]) == getSortOrder($b[0])) { 
     return 0; 
    }else { 
     return 1; 
    } 
} 

$data = array(
    "banana", 
    "apple", 
    "love", 
    "zasca", 
    "japanese", 
    "car" 
); 

echo '<pre>' . print_r($data,true) . '</pre>'; 
usort($data, "mysort"); 
echo '<pre>' . print_r($data,true) . '</pre>'; 
?> 
+0

getSortOrder ≅ array_search? –

+1

Ouais, je viens de le mettre à jour pour utiliser array_search à la place. :) –