2016-02-11 35 views
2

嗨我尝试返回最大值与排除interwal。 我从2000年到2015年的表格数据。 下一页我将返回最小值和最大值,但我希望排除2005年和2010年之间的间隔。 例如 当我rand 2000,2004,2006时,我希望max将是2004. 我的实际尝试,不起作用:最小和最大从兰特表中排除间隔在PHP

$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 
     ) 
    ) 
); 
+0

此外,您还可以更具体的了解你的意思是“不工作”是什么? –

+0

兰德之间2000年和2015年之间。我有错误:注意:使用未定义的常量ARRAY_FILTER_USE_KEY - 假设'ARRAY_FILTER_USE_KEY'中,警告:array_filter()期望至多2个参数,3中给出警告:array_keys()期望参数1是数组,null给出,警告:max():当只给出一个参数时,它必须是一个数组in和function没有retun – vjdj

+0

检查你的php版本。来自array_filter doc:“5.6.0 \t添加了可选标志参数和常量ARRAY_FILTER_USE_KEY和ARRAY_FILTER_USE_BOTH” – marcellorvalle

回答

2

那么,你真的可以调用数大于小则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; 
+0

我明白我的错误返回$ y <2005 || $ y> 2010;我编辑代码 但它仍然不起作用 – vjdj

+0

确定你的PHP是5.6?也打开'error_reporting'。 –

+0

@vjdj你确定吗?我在这里使用你的代码(与更正),它工作正常。 – marcellorvalle

0

这将始终评估为假:

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

你想:

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

或者

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

你也可以这样做

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

好主意。我相信你可以直接在'array_diff'中使用'range(2005,2010)',而不需要构建范围内的'$ intersect'。 –

0

请尝试这个

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