Skip to content

Commit

Permalink
revert random change
Browse files Browse the repository at this point in the history
  • Loading branch information
taylorotwell committed Feb 22, 2023
1 parent 24e631f commit cf3eb90
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 69 deletions.
47 changes: 16 additions & 31 deletions src/Illuminate/Collections/Arr.php
Original file line number Diff line number Diff line change
Expand Up @@ -635,32 +635,31 @@ public static function random($array, $number = null, $preserveKeys = false)
}

if (is_null($number)) {
return head(array_slice($array, random_int(0, $count - 1), 1));
return $array[array_rand($array)];
}

if ((int) $number === 0) {
return [];
}

$keys = array_keys($array);
$count = count($keys);
$selected = [];
$keys = array_rand($array, $number);

for ($i = $count - 1; $i >= $count - $number; $i--) {
$j = random_int(0, $i);
$results = [];

if ($preserveKeys) {
$selected[$keys[$j]] = $array[$keys[$j]];
} else {
$selected[] = $array[$keys[$j]];
if ($preserveKeys) {
foreach ((array) $keys as $key) {
$results[$key] = $array[$key];
}
} else {
foreach ((array) $keys as $key) {
$results[] = $array[$key];
}

$keys[$j] = $keys[$i];
}

return $selected;
return $results;
}


/**
* Set an array item to a given value using "dot" notation.
*
Expand Down Expand Up @@ -710,29 +709,15 @@ public static function set(&$array, $key, $value)
*/
public static function shuffle($array, $seed = null)
{
if (! is_null($seed)) {
if (is_null($seed)) {
shuffle($array);
} else {
mt_srand($seed);
shuffle($array);
mt_srand();

return $array;
}

if (empty($array)) {
return [];
}

$keys = array_keys($array);

for ($i = count($keys) - 1; $i > 0; $i--) {
$j = random_int(0, $i);
$shuffled[] = $array[$keys[$j]];
$keys[$j] = $keys[$i];
}

$shuffled[] = $array[$keys[0]];

return $shuffled;
return $array;
}

/**
Expand Down
39 changes: 1 addition & 38 deletions tests/Support/SupportArrTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -731,19 +731,6 @@ public function testRandom()
$this->assertCount(2, array_intersect_assoc(['one' => 'foo', 'two' => 'bar', 'three' => 'baz'], $random));
}

public function testRandomIsActuallyRandom()
{
$values = [];

for ($i = 0; $i < 100; $i++) {
$values[] = Arr::random(['foo', 'bar', 'baz']);
}

$this->assertContains('foo', $values);
$this->assertContains('bar', $values);
$this->assertContains('baz', $values);
}

public function testRandomNotIncrementingKeys()
{
$random = Arr::random(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']);
Expand Down Expand Up @@ -830,34 +817,10 @@ public function testSet()

public function testShuffleWithSeed()
{
$this->assertSame(
$this->assertEquals(
Arr::shuffle(range(0, 100, 10), 1234),
Arr::shuffle(range(0, 100, 10), 1234)
);

$this->assertNotSame(
range(0, 100, 10),
Arr::shuffle(range(0, 100, 10), 1234)
);
}

public function testShuffle()
{
$source = range('a', 'z'); // alphabetic keys to ensure values are returned

$sameElements = true;
$dontMatch = false;

// Attempt 5x times to prevent random failures
for ($i = 0; $i < 5; $i++) {
$shuffled = Arr::shuffle($source);

$dontMatch = $dontMatch || $source !== $shuffled;
$sameElements = $sameElements && $source === array_values(Arr::sort($shuffled));
}

$this->assertTrue($sameElements, 'Shuffled array should always have the same elements.');
$this->assertTrue($dontMatch, 'Shuffled array should not have the same order.');
}

public function testEmptyShuffle()
Expand Down

0 comments on commit cf3eb90

Please sign in to comment.