在我的函数中,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返回值。 像:
有什么问题? THX!
答案 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
来输入严格类型。
答案 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