我已经在数字0和1080之间生成了一个带有(n)随机,唯一值(cols)的数组。我现在需要在x个键(行)上随机插入这些值。这些行也需要是随机且唯一的,并且在“0”和“1880”之间。
因此,如果我有例如0到1080之间的8个随机值
Array (
[0] => 94
[1] => 337
[2] => 601
[3] => 751
[4] => 793
[5] => 864
[6] => 923
[7] => 1047
)
我需要这些是唯一的键值,并在0,1888之间随机选择,如下所示:
Array (
[5] => 94
[105] => 337
[621] => 601
[827] => 751
[852] => 793
[1087] => 864
[1310] => 923
[1781] => 1047
)
如果值的数量大于可用键的数量(0-1800),我需要这些键来保存一个值数组,在条目上随机分割。
示例:(5个独特的随机值(cols)介于0 - 20之间)和(3个随机键(行)介于0 - 10之间)
Array (
[0] => Array (
[0] => 1
[1] => 4
)
[3] => Array (
[0] => 11
[1] => 15
)
[7] => 18
)
我已经想过如何在JavaScript中使用它,但我不确定如何将其转换为PHP。我也觉得“随机函数”可以使用一些改进,因为它现在可能会导致接近无限循环。
jsbin可以be found here。
答案 0 :(得分:0)
首先,您可以迭代并生成数组: (使用while循环,除此之外,您可以生成相同的密钥两次,并以长度为n-1的数组结束)
$m = 3;
$n = 10;
$tmp_array = array();
while (count($tmp_array)< $n){ //ensures unique keys, upto 10. NOTE: don't do this for large n's, it might take serious amount of time - for n > 1800 it'll never stop!
$tmp_array[mt_rand(0,1800)] = mt_rand(0,1800);
}
将数字分配到“组合”键的最后一步是要么杀死很多随机性 - 要么你也应该选择像
这样的选项Array (
[0] => Array (
[0] => 1
)
[3] => Array (
[0] => 11
[1] => 15
[2] => 17
)
[7] => 18
)
作为有效结果。
我会创建一个所需长度的数组(m
),最后根据index % m
要获得所需的输出,您需要创建另一个所需长度m
的数组,再次迭代n
,选择所有最小尺寸的数组(如果超过1,则选择一个随机的数组)那个清单)
推动价值。
类似的东西:
$finalArray = array();
for ($i=0; $i<$m;$i++){
$finalArray[] = array(); //create empty arrays.
}
//push values of prior generated to the least filled array.
foreach ($tmp_array as $key=>$value){
$idx = findNext($finalArray);
$finalArray[$idx][] = $value;
}
echo "<pre>";
print_r($finalArray);
echo "</pre>";
function findNext(&$array){
$idx = null;
$length = null;
$i = -1;
foreach ($array AS $var){
$i++;
if ($length === null || count($var) < $length){
$length = count($var);
$idx = $i;
}
}
return $idx;
}
注意:未经测试,甚至可能无法运行:)
答案 1 :(得分:0)
$values = range(0, 1800);
shuffle($values);
$values = array_slice($values, 0, 8);
$keys = range(0, 1800);
shuffle($keys);
$keys = array_slice($keys, 0, 8);
$wowThatWasEasyIShouldReallyLearnToReadTheManualToBeAbleToComeUpWithTrivialStuffLikeThisMyself = array_combine($keys, $values);
var_dump($wowThatWasEasyIShouldReallyLearnToReadTheManualToBeAbleToComeUpWithTrivialStuffLikeThisMyself);
//好的,仅限第一部分 - “比键更多的价值”,自己去弄清楚。