2013-06-09 2 views
0

Этот код выбирает 2-6 шагов из массива $ vec. Я хотел бы повторить из каждого отдельного шага, но достаточно интересно, это дает мне числовые значения размещения поля в массиве (т.е. 2 5 6 вместо DFF #)php array_rand function with foreach

$pick = rand(2,6); 
    $vec = array("C","C#","D","D#","E","F","F#","G","G#","A","A#","B"); 
    $random_keys = array_rand($vec,$pick); 
    foreach ($random_keys as $pitch){ 
    echo $pitch; echo "<br>"; 
    } 

Почему он делает это и как я могу получить смолы вместо чисел?

+0

Это * документированное поведение *. См. Также примечания пользователя на странице руководства: http://php.net/array_rand Также посмотрите, что такое массив: http://php.net/array - вы можете получить * значения * теми * номера * (* индексы */* ключи *). – hakre

ответ

3

Попробуйте это:

$pick = rand(2,6); 
$vec = array("C","C#","D","D#","E","F","F#","G","G#","A","A#","B"); 
$random_keys = array_rand($vec, $pick); 
foreach ($random_keys as $key) { 
    echo $vec[$key], '<br />'; 
} 

От array_rand() документация:

Возвращаемое значение

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

+0

ах, это лучше. Благодарю. , чтобы «почему»: array_rand производит выбор * keys *, а не сами значения в массиве. (поэтому в руководстве они называли переменную 'random_keys') правильной? –

+0

@GregoryTippett - :) Yup, в документации упоминаются ключи массива. : D. – Aiias