数组中的PHP是';t寻找多个值

数组中的PHP是';t寻找多个值,php,Php,在我的函数中,数组中没有找到数字 function genNumbers($min, $max, $quantity, $qtd, $sumMin = false, $sumMax = false) { for ($i = 0; $i <= $qtd; $i++) { $numbers = range($min, $max); shuffle($numbers); $a = 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 />';
        }
    }
例如:


本例继续使用14和17返回值。 比如:

  • 2-5-6-7-9-11-13-14-16-17-18-19-21-22-25
  • 1-3-6-7-8-11-13-15-17-18-20-21-22-23-25
  • 1-3-5-6-8-11-12-15-17-19-20-21-22-24-25
  • 2-3-5-8-10-12-15-16-18-19-20-22-23-24-25
  • 3-4-7-8-9-10-13-14-15-17-20-21-23-24-25

  • 怎么了?谢谢

    您在数组中使用的是错误的。它没有特别对待“针”。它寻找大海捞针的精确副本:

    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_数组调用来检查是否存在多个值。

    您使用了错误的函数。为了实现这一点,快速查看php.net会告诉我们:-当您向下滚动一点时,它告诉我们,如果您想找到所有匹配的值,您应该使用带有
    搜索值的
    数组键
    ,因此:

    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
    传递给它来严格输入


    来源:

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

    function array_some(callable $callback, array $arr) {
      foreach ($arr as $element) {
        if ($callback($element)) {
          return TRUE;
        }
      }
      return FALSE;
    }
    
    下面的示例说明了如何使用匿名(可调用)函数作为
    array\u 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
    

    exact
    如果您将
    $strict
    设置为
    true
    的话,副本将是精确的,但要遵守排版规则。但无论如何,您不能传入一个数组并期望in_数组检查该数组中的每个值。
    $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