兰特表中的最小值和最大值,不包括以 php 为单位的间隔


Min and max from rand table with excluding interval in php

嗨,我尝试返回最大值并排除interwal。我兰德数字 beetween 2000 和 2015 到表。接下来我返回最小值和最大值,但我想排除间隔 beetween 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
        )
     )
);

那么,你真的可以调用一个小于 2005 大于 2010 的数字吗?

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

请注意,如果您的 php 版本不是5.67 - 则不能使用ARRAY_FILTER_USE_KEY参数。

更新

$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_filter(
        array_keys($d),
        function($y) {
            return $y < 2005 || $y > 2010;
        }
    )
);
echo $max;

你也可以这样做

<?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>";
?>

这将始终计算为假:

return $y < 2005 && $y > 2010;

你想要:

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

return !($y >= 2005 && $y <= 2010);

请尝试这个

    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>';
    }