我已经对我要解释的内容进行了简化。
$array ('name' => 1, 'notname' => 1, 'anothername' => 2);
function a($name1, $name2){
$total = $name1 + $name2;
$winner = rand(0, $total);
if ($winner > name2){
$winner = $name1;
} else {
$winner = $name2;
}
return $winner;
}
echo a($array['name'], $array['notname']);
我不想回复(并回应)获奖者的数量,而是想要回应获胜者的关键名称。
我觉得我正在努力做到这一点。
答案 0 :(得分:2)
问题是你的函数a
得到数字(数组值)而不是数组键。您无法从其值中获取数组键。
所以你想要:
$array ('name' => 1, 'notname' => 1, 'anothername' => 2);
function a($array, $name1, $name2){
$total = $array[$name1] + $array[$name2];
$winner = rand(0, $total);
if ($winner > $array[$name2]){
return $name1;
else
return $name2;
}
echo a($array, 'name', 'notname');
答案 1 :(得分:1)
我不确定你想要什么,但听起来像是你试图根据阵列中的位置找到一个键,或者是基于相应的键值。有一些功能可能对您有用。
从$example = array('a' => 1, 'b' => 2, 'c' => 3);
开始。字母是键,数字是值。
array_keys
将按顺序返回包含原始数组键的新数组。 array_keys($example)
将返回array(0 => 'a', 1 => 'b', 2 => 'c')
。 (您可以使用它来按位置查找键。)
array_flip
将返回一个新数组,其中包含与值交换的键。 array_flip($example)
将返回array(1 => 'a', 2 => 'b', 3 => 'c')
。
array_search
将返回第一个匹配值的键。 array_search($example, 2)
将返回'b'
。
编辑:听起来你想随意拔出一把钥匙?
array_keys($array)[rand(0, count($array) - 1)]
??
编辑2:好的,我猜你的意思是数组的值是相应名称获胜的概率。 (?)
以下是我写这个函数的方法:
function selectWinner($players) {
$select = mt_rand() / mt_getrandmax() * array_sum($players);
$position = 0;
foreach ($players as $name => $probability) {
if (($position += $probability) >= $select) return $name;
}
}
现在假设我们有一个数组:
$players = array('Bob' => 1, 'Bert' => 1, 'Betty' => 2);
呼叫selectWinner($players)
将分别返回Bob或Bert 25%的时间,并将50%的时间返回Betty。概率不一定是整数。
进行测试:
for ($i = 0; $i < 10000; $i++) @$counts[selectWinner($players)]++;
print_r($counts);
输出如下内容:
Array
(
[Betty] => 4907
[Bert] => 2560
[Bob] => 2533
)
答案 2 :(得分:0)
既然你说你现在正处理一个更复杂的问题,我会假设
echo 'name';
没有做到这一点。
从数组中获取密钥的好方法是使用foreach循环。对于上面的例子,
foreach($array as $key => $value){ echo $key; }
将返回
name notname
我不知道这是否有帮助,但没有更多信息,我能做的最好。
答案 3 :(得分:0)
首先,你的数组声明中有一个错误,它应该是:
$array('name' => 1, 'notname' => 2)
其次,你基本上写了一个函数,它接受一个变量作为参数,然后返回它。您只将值传递给该函数,就像您编写echo a('something')一样。
另外,'name'是数组中第一个值的键,如果你这样写的话。我想你想要1作为键,'name'作为值,所以你必须以相反的方式写它。
$array(1 => 'name)
此外,我建议对CS基础知识进行另一次调整:)