PHP随机选择非零变量
假设我有5个变量:PHP随机选择非零变量,php,Php,假设我有5个变量: $a=2 $b=0 $c=7 $d=0 $e=3 我想随机选择一个不是零的变量,用它做点什么,然后将所选变量设置为零 请注意,我想知道选择了哪个变量,例如,如果我得到7,我还想知道它是$c,这样我可以在读取它后更改它的值 最简单的方法是什么 我想先取所有变量,然后随机化,然后检查它是否为零,但是如果我有更多的变量和更多的零,它的伸缩性就不好。首先,我建议创建一个包含所有目标值的数组。然后可以使用过滤掉零值。然后用从过滤后的数组中选择一个随机索引 然后将一个随机非零值分配给$
$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){}
。如果它不相等,我会尝试选择另一个变量。不幸的是,在这种情况下,我认为您无法避免您所谈论的缩放问题。