如何获取随机数组值,而不仅仅是使用php的键?

时间:2017-08-18 17:07:04

标签: php arrays random

我正在尝试创建一个小应用程序,从一个比例中随机选择一些和弦/音符,但我在使用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问题,我知道。抱歉。

3 个答案:

答案 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#')