Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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 - Fatal编程技术网

PHP随机选择非零变量

PHP随机选择非零变量,php,Php,假设我有5个变量: $a=2 $b=0 $c=7 $d=0 $e=3 我想随机选择一个不是零的变量,用它做点什么,然后将所选变量设置为零 请注意,我想知道选择了哪个变量,例如,如果我得到7,我还想知道它是$c,这样我可以在读取它后更改它的值 最简单的方法是什么 我想先取所有变量,然后随机化,然后检查它是否为零,但是如果我有更多的变量和更多的零,它的伸缩性就不好。首先,我建议创建一个包含所有目标值的数组。然后可以使用过滤掉零值。然后用从过滤后的数组中选择一个随机索引 然后将一个随机非零值分配给$

假设我有5个变量:

$a=2
$b=0
$c=7
$d=0
$e=3
我想随机选择一个不是零的变量,用它做点什么,然后将所选变量设置为零

请注意,我想知道选择了哪个变量,例如,如果我得到7,我还想知道它是$c,这样我可以在读取它后更改它的值

最简单的方法是什么


我想先取所有变量,然后随机化,然后检查它是否为零,但是如果我有更多的变量和更多的零,它的伸缩性就不好。

首先,我建议创建一个包含所有目标值的数组。然后可以使用过滤掉零值。然后用从过滤后的数组中选择一个随机索引

然后将一个随机非零值分配给
$filtered_array[$random_index]
,您可以自由地将该值分配给自变量,或回显到DOM

<?php

$a = 2;
$b = 0;
$c = 7;
$d = 0;
$e = 3;

$array = [$a, $b, $c, $d, $e];
$filtered_array = array_filter($array);
$random_index = array_rand($filtered_array);

echo $filtered_array[$random_index]; // 2, 7 or 3

首先,我建议创建一个包含所有目标值的数组。然后可以使用过滤掉零值。然后用从过滤后的数组中选择一个随机索引

然后将一个随机非零值分配给
$filtered_array[$random_index]
,您可以自由地将该值分配给自变量,或回显到DOM

<?php

$a = 2;
$b = 0;
$c = 7;
$d = 0;
$e = 3;

$array = [$a, $b, $c, $d, $e];
$filtered_array = array_filter($array);
$random_index = array_rand($filtered_array);

echo $filtered_array[$random_index]; // 2, 7 or 3

应用递归函数

function rand_not_zero($arr) {
    $rand_key = array_rand($arr);
    $result = $arr[$rand_key];
    if (!$result)
        $result = rand_not_zero($arr);

    return $result;
}

$array = array($a, $b, $c, $d, $e);
echo rand_not_zero($array);

应用递归函数

function rand_not_zero($arr) {
    $rand_key = array_rand($arr);
    $result = $arr[$rand_key];
    if (!$result)
        $result = rand_not_zero($arr);

    return $result;
}

$array = array($a, $b, $c, $d, $e);
echo rand_not_zero($array);

你在问题中提到的变量是否总是固定数量?是的,变量的数量是固定的。你在问题中提到的变量是否总是固定数量?是的,变量的数量是固定的。我如何知道实际选择了哪个变量?因为一旦我得到这个值,我就想把这个特定的变量设置为零。你可以将变量设置为
0
,方法是将它分配给一个独立变量,然后用
$var=0
手动设置它。但是,要将其恢复到原始数组中,有点棘手,因为过滤后的数组将为其提供不同的索引。在这种情况下,我建议首先运行
array\u rand()
,然后检查它是否等于
0
$random\u index=array\u rand($array);如果($random_index==0){}
。如果它不相等,我会尝试选择另一个变量。不幸的是,我认为在这种情况下,您无法避免您所讨论的缩放问题。我如何知道实际选择了哪个变量?因为一旦我得到这个值,我就想把这个特定的变量设置为零。你可以将变量设置为
0
,方法是将它分配给一个独立变量,然后用
$var=0
手动设置它。但是,要将其恢复到原始数组中,有点棘手,因为过滤后的数组将为其提供不同的索引。在这种情况下,我建议首先运行
array\u rand()
,然后检查它是否等于
0
$random\u index=array\u rand($array);如果($random_index==0){}
。如果它不相等,我会尝试选择另一个变量。不幸的是,在这种情况下,我认为您无法避免您所谈论的缩放问题。