2010-07-26 9 views
1

J'ai un tableau similaire à {A, B, C, D, E, F, G, H}. Je voudrais être en mesure de choisir un index ou une entrée et que le tableau soit réorganisé. Donc, dire si j'avais une fonctionRéorganisation du tableau en PHP

reorder('C'); 

Il retourne le tableau à partir de C, avec quoi que ce soit avant cet indice ajouté à la fin, de sorte que cet exemple donnerait

{C,D,E,F,G,H,A,B} 

Y at-il une fonction ça fait déjà ça?

Merci

EDIT: J'ai utilisé ce à la fin

$key = array_search($imgToShow, $imgList);  
$sliceEnd = array_slice($imgList, 0, $key);  
$sliceStart = array_slice($imgList, count($sliceEnd));  
$array = array_merge($sliceStart, $sliceEnd); 

Répondre

7

Ce que vous pouvez faire est simple magie de changement de tableau.Première commande le tableau, si elle est pas déjà commandé, si elle est, sautez cette étape:

sort($array); 

Ensuite, trouver la valeur que vous voulez commencer commande par:

$key = array_search('C', $array); 

Retirez ensuite la partie de la tableau avant la clé trouvée:

$slice = array_splice($array, 0, $key); 

Ensuite, ajoutez la tranche à la fin du tableau:

array_splice($array, count($array), 0, $slice); 
+0

Avez-vous testé même cela? – Gumbo

+0

En fait non, a été pressé, a fixé la réponse un peu maintenant. : P –

0

Il n'y a pas une fonction qui fait cela, mais vous pouvez écrire un à l'aide d'une doublure fonctions array_splice()/array_slice() ça ferait ça.

1

Non nativement.

Vous devez utiliser usort (http://www.php.net/manual/en/function.usort.php) avec une fonction de rappel personnalisée.

Voir cet exemple dans l'url précédente:

function cmp($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

$a = array(3, 2, 5, 6, 1); 

usort($a, "cmp"); 
0

pour autant que je sache, il n'y a pas une fonction prédéfinie pour le faire. vous pouvez utiliser array slice et array_splice pour faire une telle fonction. Array_slice() retourne la séquence d'éléments du tableau array tel que spécifié par les paramètres offset et length. Array_splice() supprime les éléments désignés par offset et length du tableau d'entrée, et les remplace par les éléments du tableau de remplacement, si fourni.

Définition: http://www.php.net/manual/en/function.array-splice.php

espérons que cette aide

0
function reorder ($val, $ar){ 
    $p=array_search($val, $ar); 
    $l=count($ar); 

    for($j=0;$j<$l;j++){ 
    $nar[$j]=$ar[fmod($p,$l)]; 
    $p+=1; 
    } 
    return $nar; 
} 
3

Vous pouvez utiliser array_search pour trouver l'indice de la valeur correspondante puis array_splice pour enlever la deuxième partie (index à la fin) de la fin et de le mettre en face de la première partie (0 à indice -1) du tableau:

$arr = array('A','B','C','D','E','F','G','H'); 
if (($i = array_search('C', $arr)) !== false) { 
    array_splice($arr, 0, 0, array_splice($arr, $i)); 
} 
0

essayer cette

function reorder($arr, $item, $strict = null) { 
    $index = array_search($item, $arr, $strict); 

    if (false !== $index) { 
     $arr = array_merge(array_slice($arr, $index), array_splice($arr, 0, $index)); 
    } 

    return $arr; 
} 

$arr = array('A','B','C','D','E','F','G','H'); 

var_export($arr); 
$arr = reorder($arr, 'C'); 
var_export($arr); 

***** EDIT ***: La solution de Gumbo est meilleure que la mienne, avec:

array_splice($arr, 0, 0, array_splice($arr, $index));