2013-06-07 3 views
0

В этой теме, Pudge601 был настолько любезен, чтобы предложить решение моей проблемы: Php/MySQL random data (musical pitch) sequencesИспользование функции array_rand с многомерного массива

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

$dist = $dists[$index][array_rand($dists[$index])]; 

Я могу понять, когда я заменить (например)

$dist = $dists[$index][0] 

который извлекает первое значение массива из одного из вложенных массивов. НО, я не вижу, как эта часть:

[array_rand($dists[$index])]; 

Производит одно из требуемых значений.

Это, кажется, не соответствует описанию здесь: http://php.net/manual/en/function.array-rand.php Возможно синтаксис отличается при использовании многомерного массива в этом контексте? В любом случае, я просто не понимаю. Если кто-то может помочь мне сделать перевод на «английский», я буду благодарен!

+0

Если вы можете понять '$ dists [$ index] [0]', почему бы не '$ dists [$ index] [array_rand ($ dists [$ index])]'? В этом 'array_rand ($ dists [$ index])' возвращает число, например '0', поэтому просто замените это мысленно, и это то же самое. – deceze

ответ

2

Код должен быть прочитана как:

$arr = $dists[$index]; // select array from $dists element at index $index 
$key = array_rand($arr); // get key of a random element 
$dist = $arr[$key]; // get element value 

От documentation:

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

+0

Спасибо, но я смотрел на это, и он все еще просто не щелкает. Я следую за тем, что функция array_rand выбирает только одну запись. То, что я просто не вижу, это то, как он выбирает один из массивов на втором уровне гнездования. Например: «массив (4,3,3), массив (3,4,3), массив (3,3,4)),« Мне кажется, что $ dists [$ index] должен относиться к первому уровень гнездования в обоих обычаях - что я думаю, это то, что меня смущает. –

+0

'$ dists [$ index]' сам по себе является массивом; не уверен, что это вызывает путаницу? –

+0

hmmm. В принципе, я чувствую, что в моем знании есть некоторый пробел, который позволил бы мне понять, как работает эта структура, но я понятия не имею, какие условия должны описывать этот пробел. Если бы я это сделал, я бы знал! Спасибо, что попробовали. Я добавлю что-нибудь позже, если я смогу сформулировать, что проблема более четко. –

0

Этот же вопрос позже был решен в этой дискуссии: http://www.codingforums.com/showthread.php?t=296450

Ответа: в $dist = $dists[$index][array_rand($dists[$index])];, первое использование $dists[$index] локализует результат одного из первых вложенных массивов, а второе использование убеждается что это тот самый массив, из которого выбирается функция array_rand.

Смежные вопросы