我正在尝试创建一个小应用程序,从一个比例中随机选择一些和弦/音符,但我在使用array_rand从数组中获取那些随机值时遇到问题。 我有一个名为$ scale的数组,如下所示:
Array
(
[0] => f#
[1] => g#
[2] => a#
[3] => b
[4] => c#
[5] => d#
[6] => f
)
我还有一个名为$ chord_amt的数组:
$chord_amt = array(2,3,4,5,6);
我使用了array_rand函数从数组中随机选择了一个项目,如下所示:
$selected_chord_amt = $chord_amt[array_rand($chord_amt)];
现在我想输出这个函数可以产生的任意数量的随机和弦:
$random_chords = array_rand($scale, $selected_chord_amt);
问题是,如果我打印这个数组,而不是看到和弦/音符值,它只显示像这个例子的键:
Array ( [0] => 3 [1] => 4 )
如何获取实际值,所以上面的输出看起来像这样?
Array ( [0] => b [1] => c# )
Noob问题,我知道。抱歉。
答案 0 :(得分:2)
只需使用array_rand
:
array_flip
$random_chords = array_rand(array_flip($scale), $selected_chord_amt);
打印出类似这样的内容:
Array
(
[0] => f#
[1] => c#
[2] => d#
)
答案 1 :(得分:1)
实际上,我建议使用不同的方法。在此阵列上使用array_rand
$chord_amt = array(2,3,4,5,6);
实际上不需要生成2到6之间的随机数.PHP具有rand
函数。
请考虑以下内容:
// shuffle the list of chords
shuffle($scale);
// take a slice of it with a random length between 2 and 6
$random_chords = array_slice($scale, 0, rand(2, 6));
答案 2 :(得分:0)
喜欢这个
$intersect = array_intersect_key($scale, array_flip($random_chords));
注意,我没有对此进行测试,因为我懒得重写你的数组,但这里是文档。
http://php.net/manual/en/function.array-intersect-key.php
http://php.net/manual/en/function.array-flip.php
这是我看到的问题,
如何使用基于的键从一个数组中获取一组项目 另一个数组的值
除了所有随机的东西,你有这个数组
Array
(
[0] => f#
[1] => g#
[2] => a#
[3] => b
[4] => c#
[5] => d#
[6] => f
)
然后你想根据这些键获得这些值
Array( 3,4 )
答案是像这样的数组
Array('b','c#')