嗨,我有一个奇怪的代码结构的麻烦,我似乎无法在2小时的尝试和错误后找到问题的答案。
我有2个变量和一个带有一些子数组的数组结构(以后是导入的)系统要大到发布完整代码所以这里是问题部分:
$counter= 10;
$times = 20;
//Random 1 / 0
while($times > 0){
$number = rand(0,1);
if($number == 1) {
$counter++;
} else {
$counter--;
}
$times--;
}
所以这很简单,但问题是,总开始时10美元的总数也必须以10结束,因此必须是1
的10倍和{{1}的10倍}。
我尝试使用以下方式解决它:
0
哪个工作并且是一个简单的解决方案,但请参阅'添加1`
但这必须随机化。而这些可能性中的每一个都是在实际程序中的一个数组,因此数组不是一个选项。
TLDR:我只需要对数组的一部分进行洗牌,或者必须使用第一个代码示例中的给定代码随机生成$number = 0;
if ($counter > 0) {
$number = 1;
$counter--;
}
。说实话,我现在不知道如何做到这一点,所以任何帮助都会受到赞赏。
提前致谢。
增加1:
0 or 1
每个值可以出现2次(并不总是出现2次),如果是这种情况,则2值中的一个必须是'I'=> 1和'I'=> 0但是X充满了一个随机的:
array(
array('I' => 1, 'X' => '7'),
array('I' => 1, 'X' => '7'),
array('I' => 1, 'X' => 'value'),
array('I' => 1, 'X' => 'value'),
array('I' => 1, 'X' => 'value'),
array('I' => 1, 'X' => 'value'),
array('I' => 1, 'X' => 'value'),
array('I' => 1, 'X' => 'value'),
array('I' => 1, 'X' => 'value'),
array('I' => 1, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
array('I' => 0, 'X' => 'value'),
);
如果我对初始帖子不清楚,这是实际的结构,对不起,现在我的问题更清楚了。
增加2:
预期结果:
$x = rand(1, 100)
答案 0 :(得分:2)
最简单的解决方案是只做一个Fisher-Yates Shuffle。
就是这样:
答案 1 :(得分:1)
$yourSample = [
0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0, 8 => 0, 9 => 0,
10 => 1, 11 => 1, 12 => 1, 13 => 1, 14 => 1, 15 => 1, 16 => 1, 17 => 1, 18 => 1, 19 => 1
];
$total = count($yourSample);
$newIndexes = [];
for ($i = 0; $i < $total; $i++) {
$randItem = array_rand($yourSample);
$newIndexes[] = $yourSample[$randItem];
unset($yourSample[$randItem]);
}
//echo '<pre>';
//var_dump($newIndexes);
这适合你的问题,对吧?
更新1:
<?php
function getRandomX($sample, $spe)
{
$rand = mt_rand(0, 100);
foreach ($sample as $element) {
if ($element['X'] == $rand and $spe['I'] == $element['I']) {
$rand = getRandomX($sample, $spe);
}
}
return $rand;
}
function makeResult()
{
$sample = array_merge(
array_fill(0, 10, ['I' => 1, 'X' => null]),
array_fill(0, 10, ['I' => 0, 'X' => null])
);
shuffle($sample);
foreach ($sample as &$value) {
$value['X'] = getRandomX($sample, $value);
}
return $sample;
}
echo '<pre>';
var_export(makeResult());