2012-07-28 12 views
15

¿Cuál es la forma más elegante en PHP para mover un elemento de matriz elegido por la clave a la primera posición?Mueva el elemento de matriz con determinada clave a la primera posición de una matriz, PHP

de entrada:

$arr[0]=0; 
$arr[1]=1; 
$arr[2]=2; 
.... 
$arr[n]=n; 
$key=10; 

Salida:

$arr[0]=10; 
$arr[1]=0; 
$arr[2]=1; 
$arr[3]=2; 
.... 
$arr[n]=n; 
+0

En el ejemplo, usted no está "elemento de la elección con la tecla". Solo está insertando un valor arbitrario al comienzo de la matriz. Creo que esto podría confundir a otras personas – galymzhan

+0

@galymzhan Creo que está implícito que $ arr [10] era anteriormente 10, y ahora va de $ arr [9] = 9 a $ arr [10] = 11. Estoy de acuerdo en que el ejemplo no lo ilustra claramente. Sería mejor a) mostrar el elemento de la matriz que se está "moviendo", yb) usar valores de elementos diferentes, por lo que es más difícil confundir una clave con su valor. – octern

+0

Parece que lo mejor será la buena vieja forma con una matriz temporal y ciclo – user965748

Respuesta

6

No hay necesidad de deshacer las teclas. Para hacerlo breve acaba de hacer como sigue

//appending $new in our array 
array_unshift($arr, $new); 
//now make it unique. 
$final = array_unique($arr); 

Demo

3
<?php 
$key = 10; 
$arr = array(0,1,2,3); 
array_unshift($arr,$key); 
var_dump($arr) //10,0,1,2,3 
?> 
+0

Esto Prefiere el elemento elegido, pero no lo referencia por clave y lo elimina de otra parte de la matriz. – octern

+0

Derecha, ya dije que – user965748

26

Uso array_unshift:

$new_value = $arr[n]; 
unset($arr[n]); 
array_unshift($arr, $new_value); 
+0

Esto lo intenté antes, pero no funcionó – user965748

+0

¿Qué no funcionó? ¿Cuál fue el resultado? –

+0

La misma matriz, parece que no cambia las claves – user965748

6

Algo como esto debería funcionar. Compruebe si la clave de matriz existe, obtenga su valor, luego unset, y luego use array_unshift para crear el elemento nuevamente y colocarlo al principio.

if(in_array($key, $arr)) { 
    $value = $arr[$key]; 
    unset($arr[$key]); 
    array_unshift($arr, $value); 
} 
1
$arr[0]=0; 
$arr[1]=1; 
$arr[2]=2; 
$arr[3]=10; 


$tgt = 10; 
$key = array_search($tgt, $arr); 
unset($arr[$key]); 
array_unshift($arr, $tgt); 

// var_dump($arr); 
array 
0 => int 10 
1 => int 0 
2 => int 1 
3 => int 2 
0
$tgt = 10; 
$key = array_search($tgt, $arr); 
for($i=0;$i<$key;$i++) 
{ 
    $temp = $arr[$i]; 
    $arr[$i] = $tgt; 
    $tgt = $temp; 
} 

Después de este código simple, todo lo que necesita hacer es mostrar la re-organizó matriz. :)

7

Pregunta anterior, y ya respondida, pero si tiene una matriz asociativa, puede usar array_merge.

$arr = array_merge(array($key=>$arr[$key]), $arr); 
+1

¡Impresionante! Salvaste mi día. – Mario

1

Desde cualquier tecla numérica sería re-indexado con array_unshift (como se ha señalado in the doc), es mejor utilizar el operador + gama unión para mover un elemento con una determinada clave en la primera posición de una matriz:

$item = $arr[$key]; 
unset($arr[$key]); 
$arr = array($key => $item) + $arr; 
Cuestiones relacionadas