php中带排除间隔的rand表中的最小值和最大值

php中带排除间隔的rand表中的最小值和最大值,php,random,Php,Random,嗨,我尝试用排除interwal返回最大值。 我将2000年和2015年的兰特数字输入表格。 接下来我返回最小值和最大值,但我想排除2005年和2010年之间的间隔。 例如 当我拿到2000、2004、2006兰特时,我希望马克斯是2004年。 我的实际尝试不起作用: $tab = array(); for ($i = 0; $i < 10; $i++) { $tmp = rand(2000,2015); $tab[$i] = $tmp; } $d = array_cou

嗨,我尝试用排除interwal返回最大值。 我将2000年和2015年的兰特数字输入表格。 接下来我返回最小值和最大值,但我想排除2005年和2010年之间的间隔。 例如 当我拿到2000、2004、2006兰特时,我希望马克斯是2004年。 我的实际尝试不起作用:

$tab = array();
for ($i = 0; $i < 10; $i++) {
    $tmp = rand(2000,2015);
    $tab[$i] = $tmp;
}

$d = array_count_values($tab);
arsort($d);
$max = max(
    array_keys(
        array_filter(
            $d,
            function($y) {
                return $y < 2005 || $y > 2010;
            },
            ARRAY_FILTER_USE_KEY
        )
     )
);
$tab=array();
对于($i=0;$i<10;$i++){
$tmp=兰特(20002015);
$tab[$i]=$tmp;
}
$d=数组\计数\值($tab);
阿尔索特(d美元);
$max=max(
数组\u键(
阵列滤波器(
美元,
功能($y){
返回$y<2005 | |$y>2010;
},
数组\过滤器\使用\键
)
)
);

那么,你真的能拨打一个比2005年小,比2010年大的号码吗

{ return $y < 2005 || $y > 2010; }

这将始终评估为false:

return $y < 2005 && $y > 2010;
返回$y<2005&$y>2010;
你想要:

return $y < 2005 || $y > 2010;
返回$y<2005 | |$y>2010;


返回!($y>=2005&&$y您也可以这样做

<?php
$tab = array();
for($i=0; $i<10;$i++)
{
    $tmp = rand(2000,2015);
    $tab[$i]=$tmp;
}
$intersect = array();
foreach (range(2005, 2010) as $number) {
    $intersect[] = $number;
}
$result = array_diff($tab, $intersect);
echo max($result);
echo "<br>";
echo min($result);
echo "<br>";
?>

请试试这个

    for ($i = 0; $i < 10; $i++) {
    $tmp = rand(2000,2015);
    if($tmp > 2010 || $tmp < 2005){
        $tab[$i] = $tmp;
    }
}

    if( count($tab) > 0){
    echo "max value - ".max($tab).'</br>';
    echo "min value - ".min($tab).'</br>';
    }
($i=0;$i<10;$i++)的
{
$tmp=兰特(20002015);
如果($tmp>2010 | |$tmp<2005){
$tab[$i]=$tmp;
}
}
如果(计数($tab)>0){
回显“最大值-”.max($tab)。“
”; 回显“最小值-”.min($tab)。“
”; }
我理解返回$y<2005 | |$y>2010的错误;我编辑了代码,但仍然无法确保您的php是5.6?同时打开
错误报告
。@vjdj确定吗?我在这里使用您的代码(经过更正),它工作正常。php版本:5.5.28和错误报告(0);max return nothing.这在PHP5.5中是如何实现的?另外,你能更具体地解释一下“不工作”的意思吗?2000年到2015年之间的随机数。我有一个错误:注意:使用未定义的常量数组_FILTER_Use_KEY-假设在中使用“数组_FILTER_Use_KEY”,警告:数组_FILTER()最多需要2个参数,在中给出3个,警告:数组_KEY()预期参数1为数组,在中为空,警告:max():当仅给出一个参数时,它必须是函数中的数组,并且不包含任何内容。请重新选中您的php版本。从数组\过滤器文档:“5.6.0添加了可选标志参数和常量数组\过滤器\使用\键和数组\过滤器\两者都使用”Php版本:5.5.28。如何在PHP5.5中实现这一点?我更新了我的Php版本和代码。感谢您的帮助。我相信您可以直接在
数组中使用
范围(2005,2010)
,而无需从范围中构建
$intersect
<?php
$tab = array();
for($i=0; $i<10;$i++)
{
    $tmp = rand(2000,2015);
    $tab[$i]=$tmp;
}
$intersect = array();
foreach (range(2005, 2010) as $number) {
    $intersect[] = $number;
}
$result = array_diff($tab, $intersect);
echo max($result);
echo "<br>";
echo min($result);
echo "<br>";
?>
    for ($i = 0; $i < 10; $i++) {
    $tmp = rand(2000,2015);
    if($tmp > 2010 || $tmp < 2005){
        $tab[$i] = $tmp;
    }
}

    if( count($tab) > 0){
    echo "max value - ".max($tab).'</br>';
    echo "min value - ".min($tab).'</br>';
    }