如何从键是arg的函数返回数组的键?

时间:2014-03-17 18:32:06

标签: php

我已经对我要解释的内容进行了简化。

$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']);

我不想回复(并回应)获奖者的数量,而是想要回应获胜者的关键名称。

我觉得我正在努力做到这一点。

4 个答案:

答案 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基础知识进行另一次调整:)