PHP in_array没有找到多个值

时间:2015-12-03 17:15:58

标签: php

在我的函数中,in_array没有找到数字。

    function genNumbers($min, $max, $quantity, $qtd, $sumMin = false, $sumMax = false)
    {
        for ($i = 0; $i <= $qtd; $i++) {
            $numbers = range($min, $max);
            shuffle($numbers);
            $a = array_slice($numbers, 0, $quantity);
            asort($a);

            $x = array(14, 17);

            if (in_array($x, $a)) {
                continue;
            }

            if ($sumMin) {
                if (array_sum($a) < $sumMin)
                    continue;   
            }

            if ($sumMax) {
                if (array_sum($a) > $sumMax)
                    continue;   
            }

            foreach ($a as $key => $o) {
                if (end(array_keys($a)) == $key) {
                    $aux = '';
                } else {
                    $aux = ' - ';
                }

                echo $o . $aux;    
            }
            echo '<br />';
        }
    }

仅适用于单个号码

    if (in_array(14, $a)) {
        continue;
    }

E.g:

    <?= genNumbers(1, 25, 15, 100, 201, 201) ?>

此示例继续以14和17返回值。 像:

  1. 2 - 5 - 6 - 7 - 9 - 11 - 13 - 14 - 16 - 17 - 18 - 19 - 21 - 22 - 25
  2. 1 - 3 - 6 - 7 - 8 - 11 - 13 - 15 - 17 - 18 - 20 - 21 - 22 - 23 - 25
  3. 1 - 3 - 5 - 6 - 8 - 11 - 12 - 15 - 17 - 19 - 20 - 21 - 22 - 24 - 25
  4. 2 - 3 - 5 - 8 - 10 - 12 - 15 - 16 - 18 - 19 - 20 - 22 - 23 - 24 - 25
  5. 3 - 4 - 7 - 8 - 9 - 10 - 13 - 14 - 15 - 17 - 20 - 21 - 23 - 24 - 25
  6. 有什么问题? THX!

3 个答案:

答案 0 :(得分:1)

您使用的in_array错误。它不特别对待“针”。它在大海捞针中寻找针的精确副本:

php > $foo = array(1,2,3);
php > var_dump(in_array(array(1,2),$foo));
bool(false)

php > $bar = array(array(1,2),array(2,3), array(3,4));
php > var_dump(in_array(array(1,2), $bar));
bool(true)

因此,您无法使用单个in_array调用来检查是否存在MULTIPLE值。

答案 1 :(得分:0)

您使用的功能错误。要做到这一点,快速浏览一下php.net就会给我们:http://php.net/manual/en/function.array-search.php - 当你向下滚动时,告诉我们如果你想找到所有匹配的值,你应该使用array_keys使用search_value,所以:

array_keys(haystack, needle)

以上将返回一组匹配的键。例如:

$a = array(1,2,3,4);
$r = array_keys($a, 2);

// $r is now [1] (because the key of 1 contains the value 2)

您也可以通过传递第三个参数true来输入严格类型。

来源:http://php.net/manual/en/function.array-keys.php

答案 2 :(得分:0)

如果要检查数组中的任何值是否符合谓词,可以使用array_some的此实现:

function array_some(callable $callback, array $arr) {
  foreach ($arr as $element) {
    if ($callback($element)) {
      return TRUE;
    }
  }
  return FALSE;
}

下面是一个示例,说明如何使用匿名(可调用)函数作为array_some的第一个参数,然后使用use

传递要在谓词中检查的数组
$x = array(14, 17);

$z = array(13, 17);

$a = array(14, 18, 19, 12);

if (array_some(function($e) use ($a) { 
    return in_array($e, $a); 
}, $x)) {
    echo "some element of \$x is in \$a\n";
} else {
    echo "no element of \$x is in \$a\n";
}

if (array_some(function($e) use ($a) { 
    return in_array($e, $a); 
}, $z)) {
    echo "some element of \$z is in \$a\n";
} else {
    echo "no element of \$z is in \$a\n";
}

正如所料,输出是:

// => some element of $x is in $a
// => no element of $z is in $a

array_every and array_some implementation - kid-icarus on github