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

Php 如何从键为arg的函数返回数组的键?,php,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;

我已经把我要解释的内容简化了

$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']);
我不想返回(并回显)赢家号码,而是回显赢家钥匙的名称


我觉得我正在努力解决这个问题。

既然你说你在处理一个更复杂的问题,我就假设

echo 'name';
我不会这么做的

从数组中获取密钥的一个好方法是使用foreach循环。就你上面的例子来说

foreach($array as $key => $value){ echo $key; }
会回来吗

name notname

我不知道这是否有帮助,但如果没有更多的信息,这是我能做的最好的事情。

既然你说你在处理一个更复杂的问题,我就假设

echo 'name';
我不会这么做的

从数组中获取密钥的一个好方法是使用foreach循环。就你上面的例子来说

foreach($array as $key => $value){ echo $key; }
会回来吗

name notname

我不知道这是否有帮助,但如果没有更多的信息,这是我能做的最好的事情。

既然你说你在处理一个更复杂的问题,我就假设

echo 'name';
我不会这么做的

从数组中获取密钥的一个好方法是使用foreach循环。就你上面的例子来说

foreach($array as $key => $value){ echo $key; }
会回来吗

name notname

我不知道这是否有帮助,但如果没有更多的信息,这是我能做的最好的事情。

既然你说你在处理一个更复杂的问题,我就假设

echo 'name';
我不会这么做的

从数组中获取密钥的一个好方法是使用foreach循环。就你上面的例子来说

foreach($array as $key => $value){ echo $key; }
会回来吗

name notname

我不知道这是否有帮助,但如果没有更多信息,我只能这样做。

首先,您的数组声明中有一个错误,应该是:

$array('name' => 1, 'notname' => 2)
其次,您基本上编写了一个函数,将变量作为参数,然后返回它。您只将值传递给该函数,就像您要编写echo a('something')一样

另外,如果您这样写,“name”是数组中第一个值的键。我想你想要1作为键,“name”作为值,所以你必须反过来写

$array(1 => 'name)

此外,我还建议对CS基础知识进行另一种解读:)

首先,数组声明中有一个错误,应该是:

$array('name' => 1, 'notname' => 2)
其次,您基本上编写了一个函数,将变量作为参数,然后返回它。您只将值传递给该函数,就像您要编写echo a('something')一样

另外,如果您这样写,“name”是数组中第一个值的键。我想你想要1作为键,“name”作为值,所以你必须反过来写

$array(1 => 'name)

此外,我还建议对CS基础知识进行另一种解读:)

首先,数组声明中有一个错误,应该是:

$array('name' => 1, 'notname' => 2)
其次,您基本上编写了一个函数,将变量作为参数,然后返回它。您只将值传递给该函数,就像您要编写echo a('something')一样

另外,如果您这样写,“name”是数组中第一个值的键。我想你想要1作为键,“name”作为值,所以你必须反过来写

$array(1 => 'name)

此外,我还建议对CS基础知识进行另一种解读:)

首先,数组声明中有一个错误,应该是:

$array('name' => 1, 'notname' => 2)
其次,您基本上编写了一个函数,将变量作为参数,然后返回它。您只将值传递给该函数,就像您要编写echo a('something')一样

另外,如果您这样写,“name”是数组中第一个值的键。我想你想要1作为键,“name”作为值,所以你必须反过来写

$array(1 => 'name)

此外,我建议对CS基础知识进行另一种解读:)

我不太确定您想要什么,但在我看来,您要么试图根据其在数组中的位置找到一个键,要么根据相应的值找到一个键。有几个函数可能对您有用

$example=array('a'=>1,'b'=>2,'c'=>3)开始。字母是键,数字是值

  • 将按顺序返回包含原始数组的键的新数组
    array\u键($example)
    将返回
    array(0=>a',1=>b',2=>c')
    。(您可以使用此选项按位置查找键)

  • 将返回一个新数组,其中的键与值交换
    array\u flip($example)
    将返回
    array(1=>'a',2=>'b',3=>'c')

  • 将返回第一个匹配值的键<代码>数组搜索($example,2)
将返回
'b'


编辑:听起来你想随机拔出一把钥匙?
array\u key($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%的时间,并返回Betty 50%的时间。概率不必是整数

对于测试:

for ($i = 0; $i < 10000; $i++) @$counts[selectWinner($players)]++;
print_r($counts);

我不确定您想要什么,但我觉得您要么试图根据其在数组中的位置找到一个键,要么试图根据相应的值找到一个键。有几个函数可能对您有用

$example=array('a'=>1,'b'=>2,'c'=>3)开始。字母是键,数字是值

  • 将按顺序返回包含原始数组的键的新数组
    array\u键($example)
    将返回
    array(0=>a',1=>b',2=>c')
    。(您可以使用此选项按位置查找键)

  • 将返回一个新数组,其中的键与值交换
    array\u flip($example)
    将返回
    array(1=>