@@ -633,30 +633,28 @@ public static function random($array, $number = null, $preserveKeys = false)
633
633
}
634
634
635
635
if (is_null ($ number )) {
636
- return head ( array_slice ( $ array, random_int ( 0 , $ count - 1 ), 1 )) ;
636
+ return $ array[ array_rand ( $ array )] ;
637
637
}
638
638
639
639
if ((int ) $ number === 0 ) {
640
640
return [];
641
641
}
642
642
643
- $ keys = array_keys ($ array );
644
- $ count = count ($ keys );
645
- $ selected = [];
643
+ $ keys = array_rand ($ array , $ number );
646
644
647
- for ($ i = $ count - 1 ; $ i >= $ count - $ number ; $ i --) {
648
- $ j = random_int (0 , $ i );
645
+ $ results = [];
649
646
650
- if ($ preserveKeys ) {
651
- $ selected [$ keys [$ j ]] = $ array [$ keys [$ j ]];
652
- } else {
653
- $ selected [] = $ array [$ keys [$ j ]];
647
+ if ($ preserveKeys ) {
648
+ foreach ((array ) $ keys as $ key ) {
649
+ $ results [$ key ] = $ array [$ key ];
650
+ }
651
+ } else {
652
+ foreach ((array ) $ keys as $ key ) {
653
+ $ results [] = $ array [$ key ];
654
654
}
655
-
656
- $ keys [$ j ] = $ keys [$ i ];
657
655
}
658
656
659
- return $ selected ;
657
+ return $ results ;
660
658
}
661
659
662
660
/**
@@ -708,29 +706,15 @@ public static function set(&$array, $key, $value)
708
706
*/
709
707
public static function shuffle ($ array , $ seed = null )
710
708
{
711
- if (! is_null ($ seed )) {
709
+ if (is_null ($ seed )) {
710
+ shuffle ($ array );
711
+ } else {
712
712
mt_srand ($ seed );
713
713
shuffle ($ array );
714
714
mt_srand ();
715
-
716
- return $ array ;
717
- }
718
-
719
- if (empty ($ array )) {
720
- return [];
721
- }
722
-
723
- $ keys = array_keys ($ array );
724
-
725
- for ($ i = count ($ keys ) - 1 ; $ i > 0 ; $ i --) {
726
- $ j = random_int (0 , $ i );
727
- $ shuffled [] = $ array [$ keys [$ j ]];
728
- $ keys [$ j ] = $ keys [$ i ];
729
715
}
730
716
731
- $ shuffled [] = $ array [$ keys [0 ]];
732
-
733
- return $ shuffled ;
717
+ return $ array ;
734
718
}
735
719
736
720
/**
0 commit comments