2011-11-25 66 views
2

我正在開發一個模塊,其中包含一些數組。 現在我的數組包含:PHP:更快速檢查變量是整數還是以#

$omearray = array (
    '#title' = 'title', 
    0 = array ('another array', '2ndvalue',), 
); 

foreach($omearray as $key => $value) 

當我加載陣列,以顯示我要檢查$key值是否爲0123等或有#開始$key值。

哪個更好用:檢查值is_int()或檢查第一個字符是否是#的正則表達式?

編輯:檢查字符串1是#is_int()因爲正則表達式似乎很慢。

+2

與其他字符串操作函數相比,正則表達式非常慢。如果你想檢查第一個字符是否是'#',使用'strpos($ key,'#')=== 0'(並且確保像我一樣使用三個'=',原因解釋[這裏] (http://php.net/manual/en/function.strpos.php))。 – MartinodF

回答

3

由於if ($key[0]=='#')更快,is_int()是窮舉的,並且||是短路操作者與左結合(從評估左到右,看到例如1上http://php.net/manual/en/language.operators.logical.php),我會說:

if ($key[0]=='#' || is_int($val)) /* etc */ 

因爲這樣一來,你只需要操心使用#鍵命名自制約定與關鍵你會比較這麼多,你會從優化中受益。

但是,除非你正在做評估的一個巨大的數字我會堅持只是if(is_int($val)),因爲它是清晰不亂。

1

我會去is_int(),因爲你不依賴於字符串。它可以是任何東西,你的代碼仍然只是取整數。尋找#作爲第一個字符會阻止這種靈活性。但是如果你確定這個字符串的第一個字符永遠是#,那麼這個$Key[0] == '#'將是最快的選擇。

2

我會用if($key[0]=="#")

您還可以檢查$值是一個數組(is_array($value))檢查,在這種情況下,你不需要任何的正則表達式,is_int和#字符。

PS:#字符的裝置(某處)「我是一個數/ ID」

+0

爲什麼在is_int方法之上使用這種方法?我會說檢查整數更靈活,因爲你不依賴於#字符。 –

+1

@Baszz如果在數字之前有'#'個字符,並且在其他字符之前沒有#,那麼這是檢查其數字的最快方法。 但#字符可能是多餘的,因爲有一個功能來做到這一點 - is_int() – 2011-11-25 13:30:22

+0

如果你確定#總是在那裏,你是絕對正確的。我只是想知道是什麼驅使你回答這個問題。 –

1
if (is_int($val) || $val{0} == '#') ... 
0

你還沒有太多瞭解您的實際數據或之所以選擇這種結構,但根據該信息,改變你的結構,這樣你是不是相互混合整數索引與散列鍵可能是一種選擇:

$omearray = array(
    '#title' => 'title', 
    'foo' => array(
     'anotherarray', 
     '2ndvalue' 
    ) 
); 

foreach ($omearray as $key => $value) { 
    if ($key == 'foo') { 
     // do something with $value, which is the 2nd array, numerically indexed 
    } 
} 

如果此解決方案不適合您的需求,我們深表歉意。

+0

Nope不適用於我數據以我上面提供的方式生成。我也不是在問如何,而是在哪些方面更好。 – FLY

0

您可以檢查是否字符串是整數
或者如果它與#
或兩者
或什麼的開始。

這一切都沒有絲毫差異。

這不是您的代碼的一部分,可能會影響任何性能問題。