Подтвердить что ты не робот

Php получает два разных элемента случайных массивов

Из массива

 $my_array = array('a','b','c','d','e');

Я хочу получить два РАЗНЫХ случайных элемента.

Со следующим кодом:

 for ($i=0; $i<2; $i++) {
    $random = array_rand($my_array);  # one random array element number
    $get_it = $my_array[$random];    # get the letter from the array
    echo $get_it;
 }

можно получить в два раза одну и ту же букву. Мне нужно предотвратить это. Я хочу получить всегда два разных элемента массива. Может кто-нибудь сказать мне, как это сделать? Благодаря

4b9b3361

Ответ 1

Вы всегда можете удалить элемент, который вы выбрали в первый раз, тогда вы не сможете его снова выбрать. Если вы не хотите изменять массив, создайте копию.

 for ($i=0; $i<2; $i++) {
    $random = array_rand($my_array);  # one random array element number
    $get_it = $my_array[$random];    # get the letter from the array
    echo $get_it;

    unset($my_array[$random]);
 }

Ответ 2

array_rand() может принимать два параметра, массив и количество (разных) элементов, которые вы хотите выбрать.

mixed array_rand (массив $input [, int $num_req = 1])
$my_array = array('a','b','c','d','e');
foreach( array_rand($my_array, 2) as $key ) {
  echo $my_array[$key];
}

Ответ 3

Как насчет этого?

$random = $my_array; // make a copy of the array
shuffle($random); // randomize the order
echo array_pop($random); // take the last element and remove it
echo array_pop($random); // s.a.

Ответ 4

foreach (array_intersect_key($arr, array_flip(array_rand($arr, 2))) as $k => $v) {
    echo "$k:$v\n";
}

//or

list($a, $b) = array_values(array_intersect_key($arr, array_flip(array_rand($arr, 2))));

Ответ 5

здесь простая функция, которую я использую для вытягивания нескольких случайных элементов из массива.

function get_random_elements( $array, $limit=0 ){

    shuffle($array);

    if ( $limit > 0 ) {
        $array = array_splice($array, 0, $limit);
    }

    return $array;
}

Ответ 6

Вот как я это сделал. Надеюсь, это поможет кому-то запутать.

$originalArray = array( 'first', 'second', 'third', 'fourth' );
$newArray= $originalArray;
shuffle( $newArray);
for ($i=0; $i<2; $i++) {
  echo $newArray[$i];
}

Ответ 7

Получите первый случайный случай, затем используйте цикл do..while, чтобы получить второе:

$random1 = array_rand($my_array);
do {
    $random2 = array_rand($my_array);
} while($random1 == $random2);

Это будет продолжаться до тех пор, пока random2 не будет таким же, как random1