2016-04-24 45 views
0

ELL一個整數更大,我首先想到的是使用array_filter函數看起來是這樣的所有元素:PHP,返回一個整數數組,它比存儲在一個變量

function gettime(){ 


$cityciqurechangetime = an array of integers; 
$iniFirstLegEndTime = an integer calculated by other methods; 

$CitySquareTimearray = array_filter($cityciqurechangetime, 
            function($n){global $iniFirstLegEndTime ; 
            return $n >= ($iniFirstLegEndTime);}); 

return $CitySquareTimearray; 

} 

但它不工作,我運行了一些測試,結果表明變量$ iniFirstLegEndTime從未傳遞給array_filter()函數中的回調函數,所以$ CitySquareTimearray變量只是整個數組$ cityciqurechangetime。

我曾經想過,也許我不應該在array_filter()函數中聲明一個函數,但是下面的函數完美地起作用,其中$ starttimetabletime是 的一個時間戳數組。

$initStartTimearray = array_filter($starttimetabletime, 
            function($n) 
            {return $n >= time();}); 

我真正想要的是$ cityciqurechangetime的「子陣」與所有元素大於或小於$ iniFirstLegEndTime等,請告訴我,我做錯了什麼或者是否有更好的方法來解決其他這個問題比使用array_filter()函數請教我,非常感謝。

+0

您可以在anon函數中使用全局內部函數,但不要在gettime()中全局化。不起作用。 – Grzegorz

回答

2

您的退貨聲明不正確。這裏是你的腳本的更新版本:

function gettime(){ 


    $cityciqurechangetime = [1,2,3,4,5]; 
    $iniFirstLegEndTime = 2; 

    $CitySquareTimearray = array_filter($cityciqurechangetime, function($n) use ($iniFirstLegEndTime){ 
     return $n >= ($iniFirstLegEndTime)?$n:null; 
    }); 

    return $CitySquareTimearray; 

} 

var_dump(gettime()); 

你應該使用數組過濾器,因爲它是更高性能,然後對數組進行迭代。

+0

非常感謝你的隊友,它完美的作品 –

0

上述@ null05提供的更新函數是避免使用關鍵字global的正確方法,並且可以在不使用三元運算符的情況下進一步簡化返回語句。

function gettime() { 
    $cityciqurechangetime = [1,2,3,4,5]; 
    $iniFirstLegEndTime = 2; 

    $CitySquareTimearray = array_filter($cityciqurechangetime, function($n) use ($iniFirstLegEndTime) { 
     return $n >= $iniFirstLegEndTime; 
    }); 

    return $CitySquareTimearray; 
} 

var_dump(gettime()); 

回調內array_filter返回一個布爾值,通知array_filter哪些項目的$CitySquareTimearray陣列中包括。

+0

非常感謝你,短而優雅 –