2011-06-15 23 views
7

Quiero hacer que mi matriz multidimensional esté en orden aleatorio. ¿Como lo harias?matriz multidimensional en orden aleatorio

// This is how the array looks like 
print_r($slides); 

Array 
(
    [0] => Array 
     (
      [id] => 7 
      [status] => 1 
      [sortorder] => 0 
      [title] => Pants 
     ) 

    [1] => Array 
     (
      [id] => 8 
      [status] => 1 
      [sortorder] => 0 
      [title] => Jewels 
     ) 

    [2] => Array 
     (
      [id] => 9 
      [status] => 1 
      [sortorder] => 0 
      [title] => Birdhouse 
     ) 

    [3] => Array 
     (
      [id] => 10 
      [status] => 1 
      [sortorder] => 0 
      [title] => Shirt 
     ) 

    [4] => Array 
     (
      [id] => 11 
      [status] => 1 
      [sortorder] => 0 
      [title] => Phone 
     ) 

) 

// This how the result is if I use array_rand() 
print_r(array_rand($slides, 5)); 

Array 
(
    [0] => 0 
    [1] => 1 
    [2] => 2 
    [3] => 3 
    [4] => 4 
) 

// This how the result is if I use shuffle() 
print_r(shuffle($slides)); 

1 
+1

posible duplicado de [Mezclar el primer nivel de la matriz en PHP] (http://stackoverflow.com/questions/21758260/shuffling-the-first-level-of-the-array-in-php) –

Respuesta

17

shuffle() es el camino a seguir aquí. Imprime 1 porque shuffle cambia el vector de en el lugar y devuelve un valor lógico, como está escrito en el documentation:

Devuelve VERDADERO el éxito o FALSO en caso de fallo.

sugiero leer también los documentation of array_rand():

Selecciones de una o más entradas aleatorias fuera de una matriz, y devuelve la clave (o claves) de las entradas al azar.


Siempre lea la documentación si utiliza las funciones incorporadas. No solo asuma cómo funciona. Apuesto a que tomó más tiempo escribir la pregunta que buscarla.

+2

Subir vote sobre "No asuma cómo funcionan" porque las funciones de php son inconsistentes como el infierno :) – Scuzzy

+2

* Palm to head * ¡Por supuesto! Desconocí la explicación en php.net para shuffle() – Cudos

+0

. Siento que este es un comentario tonto, pero supongo que "camisa" quiere mantener su "estado" después de la mezcla. En otras palabras, solo la primera dimensión se baraja, ¿verdad? –

0

Funciona perfecto. print_r (shuffle ($ slides))) da la salida de TRUE, ya que el valor de retorno de shuffle es booleano y no una matriz.

Véase el ejemplo de trabajo aquí: http://codepad.org/B5SlcjGf

1

En lugar de

print_r(shuffle($slides)); 

hacer

shuffle($slides); 
print_r($slides); 

Ves shuffle() baraja la matriz en el lugar

+1

Gracias por todos los votos a favor. Sin embargo, un comentario sobre lo que está mal sería bueno – mkilmanas

1

No estoy seguro de cómo desea que se muestre, pero puede recorrer la matriz y usar p función hp rand (0, arraylen) para analizar la matriz.

Cuestiones relacionadas