непонятное с синтаксисом оператора `array_rand`

250
16 марта 2017, 23:50

Синтаксис array_rand, гласит: array_rand ( array input [, int num_req] ), где num_req - количество выбираемых значений.

Тогда почему при установке параметра num_reg в значение 1, рандом перестаёт работать? Т.е. пример №1:

$input = array(1,2,3,4,5,6,7,8,9,10,11,12,13);
$rnd_key = array_rand($input, 1); // вот тут поставим "1" (в нём-от и загвоздка)
$rnd = $input[$rnd_key[0]]; // тут ни чего не получим(!)

пример №2

$input = array(1,2,3,4,5,6,7,8,9,10,11,12,13);
$rnd_key = array_rand($input, 2); // тут ставим 2 и всё начинает работать.
$rnd = $input[$rnd_key[0]]; // тут получим нужное нам, выбранное рандомно, значение.
$rnd_2 = $input[$rnd_key[1]]; // тут ещё можем получить и второе значение, которое нам, допустим, и не нужно даже. 

Вопрос: почему первый пример не работает?

Answer 1

Проверьте в первом примере - действительно ли полученный $rnd_key содержит МАССИВ, а не скалярное значение (если второй параметр опустить - возвращается именно скаляр).

Для того, чтобы всегда получать массив, воспользуйтесь советом qeremy из usernotes к документации

And example for getting random value from assoc arrays

<?php
function array_random_assoc($arr, $num = 1) {
    $keys = array_keys($arr);
    shuffle($keys);
    $r = array();
    for ($i = 0; $i < $num; $i++) {
        $r[$keys[$i]] = $arr[$keys[$i]];
    }
    return $r;
}
$a = array("a" => "apple", "b" => "banana", "c" => "cherry");
print_r(array_random_assoc($a));
print_r(array_random_assoc($a, 2));
?>

Output

Array
(
    [c] => cherry
)
Array
(
    [a] => apple
    [b] => banana
)
Answer 2

Если вы выбираете только одно значение, функция array_rand() возвращает ключ, соответствующий этому значению.

В обратном случае, она возвращает массив ключей, соответствующих случайным значениям.

Пример для одного числа https://eval.in/754748 и для двух https://eval.in/754750

READ ALSO
Почему возникает ошибка Parse error: syntax error, unexpected T_VARIABLE?

Почему возникает ошибка Parse error: syntax error, unexpected T_VARIABLE?

Здравствуйте, внутри класса есть задание конфига:

279
Создание подключения к БД [ООП php]

Создание подключения к БД [ООП php]

Начал разбираться с ООП php, а именно с архитектурой MVCВозник вопрос по подключению к бд

416
Получение данных html-формы через ajax

Получение данных html-формы через ajax

Вопрос: при заполнении полей формы, срабатывает условие в form_processingphp и выводится значение переменных, а при отправке пустых полей - все равно...

259
Лишние 2 пустые строки во всем проекте Netbeans

Лишние 2 пустые строки во всем проекте Netbeans

Подскажите пожалуйста, во всем проекте появились дополнительные 2 пустые строки, как бы их удалить не в каждом отдельном файле, а во всем проекте...

271