嗨,我尝试返回最大值并排除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.6
或7
- 则不能使用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>';
}