shuffle

(PHP 4, PHP 5, PHP 7, PHP 8)

shuffleMezcla los elementos de un array

Descripción

shuffle(array &$array): true

Mezcla los elementos del array array.

Precaución

Esta función no genera valores criptográficamente seguros, y no debe ser utilizada con fines criptográficos, o con fines que requieran que los valores devueltos sean indescifrables.

Si se requiere aleatoriedad criptográficamente segura, el Random\Randomizer puede ser utilizado con el motor Random\Engine\Secure. Para casos de uso simples, las funciones random_int() y random_bytes() proporcionan una API práctica y segura que es soportada por el CSPRNG del sistema operativo.

Precaución

Esta función utiliza la instancia global Mt19937 ("Mersenne Twister") como fuente de aleatoriedad y por lo tanto comparte su estado con todas las demás funciones que usan el Mt19937 global. El uso de cualquiera de estas funciones avanza la secuencia para todas las demás funciones, independientemente del ámbito.

Generar secuencias repetibles sembrando mt_srand() o srand() con un valor conocido también producirá una salida repetible de esta función.

Preferir el uso de los métodos de Random\Randomizer en todo código nuevo.

Parámetros

array

El array.

Valores devueltos

Retorna siempre true.

Historial de cambios

Versión Descripción
7.1.0 El algoritmo interno de generación aleatoria ha sido modificado para utilizar el generador de números aleatorios »  Mersenne Twister en lugar de la función libc rand.

Ejemplos

Ejemplo #1 Ejemplo con shuffle()

<?php
$numbers
= range(1, 20);
shuffle($numbers);
foreach (
$numbers as $number) {
echo
"$number ";
}
?>

Notas

Nota: Esta función asigna nuevas claves a los elementos en array. Eliminará todas las claves existentes que hayan podido ser asignadas, en lugar de reordenar las claves.

Nota:

Reinicia el puntero interno del array al primer elemento.

Ver también

add a note

User Contributed Notes 2 notes

up
135
ahmad at ahmadnassri dot com
16 years ago
shuffle for associative arrays, preserves key=>value pairs.
(Based on (Vladimir Kornea of typetango.com)'s function) 

<?php
    function shuffle_assoc(&$array) {
        $keys = array_keys($array);

        shuffle($keys);

        foreach($keys as $key) {
            $new[$key] = $array[$key];
        }

        $array = $new;

        return true;
    }
?>

*note: as of PHP 5.2.10, array_rand's resulting array of keys is no longer shuffled, so we use array_keys + shuffle.
up
4
pineappleclock at gmail dot com
17 years ago
If you want the Power Set (set of all unique subsets) of an array instead of permutations, you can use this simple algorithm:

<?php
/**
* Returns the power set of a one dimensional array,
* a 2-D array.
* array(a,b,c) ->
* array(array(a),array(b),array(c),array(a,b),array(b,c),array(a,b,c))
*/
function powerSet($in,$minLength = 1) { 
   $count = count($in); 
   $members = pow(2,$count); 
   $return = array();
   for ($i = 0; $i < $members; $i++) {
      $b = sprintf("%0".$count."b",$i);
      $out = array();
      for ($j = 0; $j < $count; $j++) {
         if ($b{$j} == '1') $out[] = $in[$j];
      }
      if (count($out) >= $minLength) {
         $return[] = $out;
      }
   }
   return $return;
}
?>
To Top