update page now

shuffle

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

shuffleEmbaralha um array

Descrição

shuffle(array &$array): true

Essa função embaralha (mistura de forma aleatória os elementos de) um array.

Cuidado

Esta função não gera valores criptograficamente seguros e não deve ser usada para propósitos criptográficos ou fins que exijam que os valores retornados sejam impossíveis de adivinhar.

Se aleatoriedade criptograficamente segura for necessária, a classe Random\Randomizer pode ser usada com o mecanismo Random\Engine\Secure. Para casos de uso simples, as funções random_int() e random_bytes() fornecem uma API conveniente e segura que é garantida pelo CSPRNG do sistema operacional.

Parâmetros

array

O array.

Valor Retornado

Sempre retorna true.

Registro de Alterações

Versão Descrição
7.1.0 O algoritmo interno de randomização mudou para o Gerado de Números Aleatórios » Mersenne Twister no lugar da função rand do libc.

Exemplos

Exemplo #1 Exemplo de shuffle()

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

Notas

Nota: Esta função atribui novas chaves aos elementos do array. Ela removerá todas as chaves existentes que possam ter sido atribuídas, em vez de apenas reordenar as chaves.

Nota:

Redefine o ponteiro interno do array para o primeiro elemento.

Veja Também

adicionar nota

Notas de Usuários 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