首先,我创建了一个数组,比如6个元素。然后我随机挑选4个好的元素(在我意思的随机位置上)。
现在,我想随机选择那些非常好的4个中的2个。 如果array1的值与array2相同,那么我希望它说非常好。好吧,说好的。如果值为0,则为BAD。
我尝试了所有可能性并且都失败了。
这是我最后一次这样做的尝试......
$array1 = array();
$array2 = array();
while (count($array1) < 4) {
$rand = rand(1,6);
if (!isset($array1[$rand])) {
$array1[$rand] = TRUE;
}
}
while (count($array2) < 2) {
$rand = rand(1,4);
if (!isset($array2[$rand])) {
$array2[$rand] = TRUE;
}
}
$array2 = $array2 + array_fill(1, 4, FALSE);
$array1 = $array1 + array_fill(1, 6, FALSE);
ksort($array1);
ksort($array2);
foreach($array1 as $k => $v){
if ($v != 0)
{echo "GOOD<br>";}
else {echo "BAD<br>";}}
foreach($array2 as $kc => $vc){
if ($v2 !=0)
{echo "VERY GOOD<br>";}
else {echo "BAD<br>";}}
这就是它给我的东西:
GOOD
GOOD
BAD
GOOD
GOOD
BAD
VERY GOOD
BAD
BAD
VERY GOOD
如你所见,它给了我4/6货物然后2/6非常好。 我想要的是4/6 GOODS,从我选择的4个中我想要2/4非常好的商品。
我该怎么做?
提前致谢, 维拉德
答案 0 :(得分:0)
你想要一个大小为6的数组,为什么要创建多个?您可以以某种方式合并它们,也可以使用第二种方法构建它们。
但首先,我想指出while()
循环非常相似,所以应该很容易将它放入function
并保存一些代码来编写并拥有一个代码库更易于管理,因为您只需要编辑一个地方即可立即生效而不是很多。
现在,对于第一项任务,您只需要创建$num
个元素和$range
。此函数将执行您的while()
个循环执行的操作以及array_fill()
。 (demo)
function fillRandom($range, $num = 1) {
$data = array_fill($range[0], $range[1]+1, FALSE);
for ($i=0; $i<$num; $i++) {
do {
$key = mt_rand($range[0], $range[1]);
} while ($data[$key] === TRUE);
$data[$key] = TRUE;
}
return $data;
}
现在出现了更高级的部分:在第二轮中,我们可以通过给出另一个TRUE
(作为示例)来识别6个元素数组中的4个$value
中的2个。 / p>
在某些情况下需要$data
,并且使用$anon
ymous function我们可以允许传递while()
的条件。
function fillRandom($range, $num = 1, $value = TRUE, $data = array(), $anon = NULL) {
if (empty($data))
$data = array_fill($range[0], $range[1]+1, FALSE);
if ($anon === NULL) {
$anon = function($el) use($value) {
return $el !== $value;
};
}
for ($i=0; $i<$num; $i++) {
do {
$key = mt_rand($range[0], $range[1]);
} while (isSet($data[$key]) && !$anon($data[$key]));
$data[$key] = $value;
}
return $data;
}
然后你可以做这样的事情(demo)
$input = fillRandom(array(0, 5), 4);
ksort($input);
print_r($input);
$input = fillRandom(array(0, 5), 2, 2, $input, function($el){
return $el === TRUE;
});
ksort($input);
print_r($input);