Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有相同多个值的数组_Php_Arrays - Fatal编程技术网

Php 具有相同多个值的数组

Php 具有相同多个值的数组,php,arrays,Php,Arrays,我编写了以下代码片段: $a = array('X', 'X', 'X', 'O', 'O', 'O'); $rk = array_rand($a, 3); $l = $a[$rk[0]].$a[$rk[1]].$a[$rk[2]]; if($l == 'OOO' || $l == 'XXX'){ echo $l . 'Winner'; } else { echo = $l . 'Loser'; } 在数组中,你会注意到相同值的倍数,这是因为三个值是随机选择的,如果匹

我编写了以下代码片段:

$a = array('X', 'X', 'X', 'O', 'O', 'O');

$rk = array_rand($a, 3);

$l = $a[$rk[0]].$a[$rk[1]].$a[$rk[2]];

if($l == 'OOO' || $l == 'XXX'){

   echo $l . 'Winner';

} else {

   echo = $l . 'Loser';

}
在数组中,你会注意到相同值的倍数,这是因为三个值是随机选择的,如果匹配,你就会赢(这是一个基本游戏)

我的问题是,如何在不必在数组中添加相同值的倍数的情况下对其进行编码

更新: 对亚尼克·罗森问题的答复

目前的阵列是:

$a = array('X', 'X', 'X', 'O', 'O', 'O');
有可能以某种方式使它成为公正的

$a = array('X', 'O');

仍然返回3个值?

您的意思是这样的

$letter = false;
$winner = true;

foreach($rk as $key)
{
   if($letter === false) $letter = $a[$key];
   elseif($a[$key] != $letter) $winner = false;
}

if($winner) echo 'Winner';
else echo 'Loser';
$num=3;
$unique_vals=数组('X','O');
$a=数组();
foreach($unique\u vals作为$val)
{  
对于($i=0;$i<$num;$i++)
{
$a[]=$val;
}
}
带有基本兰德:

<?php
$a = array('X', 'O', 'R');
$size = count($a)-1;

$l = $a[rand(0,$size)].$a[rand(0,$size)].$a[rand(0,$size)];

if($l == 'OOO' || $l == 'XXX'){
   echo $l . ' Winner';
} else {
   echo $l . ' Loser';
}
?>

具有XXX或OOO或RRR win的版本:

<?php
$a = array('X', 'O', 'R');
$size = count($a)-1;

$l = $a[rand(0,$size)].$a[rand(0,$size)].$a[rand(0,$size)];

if($l === 'OOO' || $l === 'XXX' || $l === 'RRR'){
   echo $l . ' Winner';
} else {
   echo $l . ' Loser';
}
?>

要按程序创建整个程序,下面是一段代码片段。你可以测试一下

函数随机数组($multiple,$length=4){

如果($length count($mable)
。例如,此调用
randomary(1,27)
将失败,脚本将无限期运行。正如您所知:)

您能给出一个“可接受”数组的示例吗?您的意思是
数组('X','X','X','X','O','O')
是不可接受的,但
数组('X','X','A','B','C'))
会是什么?在测试中,我得到了胜利和失败,但我确实编辑了它,将其包括在if RRR中。
<?php
$a = array('X', 'O', 'R');
$size = count($a)-1;

$l = $a[rand(0,$size)].$a[rand(0,$size)].$a[rand(0,$size)];

if($l === 'OOO' || $l === 'XXX' || $l === 'RRR'){
   echo $l . ' Winner';
} else {
   echo $l . ' Loser';
}
?>
function randomArray($multiple, $length = 4) {
    if ($length <= $multiple) {
       throw new Exception('Length must be greater than multiple');
    }

    // define possible characters
    $possible = 'ABCEFGHIJKLMNPQRSTUVWXYZ'; 

    $value = str_repeat(substr($possible, mt_rand(0, strlen($possible)-1), 1), $multiple);
    $i = strlen($value);

    // add random characters to $value until $length is reached
    while ($i < $length) { 

        // pick a random character from the possible ones
        $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);

        // we don't want this character if it's already in the string
        if (!strstr($value, $char)) { 
            $value .= $char;
            $i++;
        }

    }

    // done!
    $value = str_split($value);
    shuffle($value);

    return $value;
}

// return a random selection from the given array
// if $allowRepick is true, then the same array value may be picked multiple times
function arrayPick($arr, $count, $allowRepick = false) {
    $value = array();

    if ($allowRepick) {
        for ($i = 0; $i < $count; ++$i) {
            array_push($value, $arr[mt_rand(0, count($arr) - 1)]);
        }
    } else {
        shuffle($arr);

        $value = array_slice($arr, 0, $count);
    }

    return $value;
}


// generate an array with 4 values, from which 3 are the same
$values = randomArray(3, 4);

// pick any 3 distinct values from the array
$choices = arrayPick($values, 3, false);

// convert to strings
$valuesStr = implode('', $values);
$choicesStr = implode('', $choices);

echo 'Value  : ' . $valuesStr . "\n";
//echo 'Choice : ' . $choicesStr . "\n";

if (preg_match('/^(.)\1*$/', $choicesStr)) {
    echo $choicesStr . ' : Winner!';
} else {
    echo $choicesStr . ' : Loser!';
}