【问题标题】:Searching array for multiple value在数组中搜索多个值
【发布时间】:2017-12-08 03:08:54
【问题描述】:

所以我有一个包含

的数组
"1", "2", "3", "4"

我使用array_rand 随机选择其中一个数字五次。 然后我想计算有多少array_rand 的结果被选择了多次,比如数字 2 被选择了 2 次,数字 3 被选择了 2 次。

我已经测试过这样做

$array = array($kort1[$rand_kort1[0]], $kort1[$rand_kort2[0]], $kort1[$rand_kort3[0]], $kort1[$rand_kort4[0]], $kort1[$rand_kort5[0]]);
$bank = array_count_values($array);
if (in_array("2", $bank)) {
    echo "You got one pair";
} elseif(in_array("2", $bank) && (???)) {
    echo "You got two pair";
}

如果其中一个数字被随机选择 2 次,它会告诉我“你有一对”,但我的问题是,如果选择了其中 2 个数字,我不知道如何让它说“你有两对” 2次。 $bank 的结果可能是

 [4] => 1 [3] => 2 [1] => 2 

我已经找了几个小时没有运气的解决方案。

【问题讨论】:

  • [3] => 2 [1] => 3 被认为是两对吗?
  • @Erwin [3] => 2 [1] => 2 那是两对,代码应该忽略最后一个数字
  • 四个怎么样?那也算两对吗?例如[3] => 4 [1] => 1
  • 用单行解决方案更新了我的答案

标签: php arrays if-statement


【解决方案1】:

试试这个:(即使你的数组​​有超过 4 个值也可以)

$count = 0;
foreach ($bank as $key=>$value) {
    if ($value === 2) {
        $count++;
    }
}

if ($count) {
    $s = $count > 1 ? 's' : '';
    echo "You got $count pair$s";
}

它将显示类似You got 1 pair 的输出。如果你想使用单词(就像你在问题中提到的那样),你可以使用NumberFormatter class

【讨论】:

    【解决方案2】:

    您可以使用 array_filter 将函数应用于数组的每个元素

    $bank=array(4 => 1, 3 => 2, 1 => 2); // Your array
    function pairs($var) {
        return($var === 2); // returns value if the input integer equals 2
    } 
    $pairs=count(array_filter($bank, "pairs")); // Apply the function to all elements of the array and get the number of times 2 was found
    if ($pairs === 1)  
    {
    echo "you got one pair";
    }
    if ($pairs === 2) {
    echo "you got two pairs";
    }
    

    编辑

    后来想到了这个班轮:

    $pairs=count(array_diff($bank, array(1,3,4)));
    

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2014-10-26
      • 2017-10-09
      • 2012-12-05
      • 2022-01-03
      相关资源
      最近更新 更多