2012-05-02 73 views
4


我想檢測是否一個或多個變量包含數字。我嘗試了幾種不同的方法,但我並沒有完全成功。

這是我試過的。難度檢查,如果數組元素的類型整數PHP

<?php 
$one = '1'; 
$two = '2'; 

$a1 = '3'; 
$a2 = '4'; 
$a3 = '5'; 


$string_detecting_array = array(); 

array_push($string_detecting_array, $one,$two,$a1,$a2,$a3); 

foreach ($string_detecting_array as $key) { 
    if (is_numeric($key)) { 
     echo 'Yes all elements in array are type integer.'; 
    } 
    else { 
     echo "Not all elements in array were type integer."; 
    } 
} 

?> 



我還沒有使用這種方法取得了成功。有任何想法嗎?先謝謝你!

回答

4

,如果你想明確地知道,如果變量是一個數字,您可以使用gettype。使用is_numeric將不尊重類型。

如果您打算使用is_numeric,但要知道,如果所有元素,然後進行以下操作:

$all_numeric = true; 
foreach ($string_detecting_array as $key) { 
    if (!(is_numeric($key))) { 
     $all_numeric = false; 
     break; 
    } 
} 

if ($all_numeric) { 
    echo 'Yes all elements in array are type integer.'; 
} 
else { 
    echo "Not all elements in array were type integer."; 
} 
+0

嘿,感謝的快速反應。我剛剛嘗試過,看起來並不奏效。我剛剛用gettype取代了is_numeric。這是你的意思嗎? –

+0

嘗試'var_dump(gettype($ one))'看看是否有意義。 – bossylobster

+0

嗨,感謝這個例子,這非常有幫助!按照我想要的方式工作。我的邏輯顯然是錯誤的。 Thankyou清理它。 –

6

首先,你的循環邏輯是錯的:你應該處理所有的在達成判決前陣列中的物品。最短的(雖然不是最明顯)的方式來做到這一點是

$allNumbers = $array == array_filter($array, 'is_numeric'); 

這工作,因爲array_filter保留鍵和comparing arrays with ==檢查元素計數,鑰匙,值(和值,這裏是原始類型,因此可平凡比較)。

一個更現實的解決辦法是

$allNumbers = true; 
foreach ($array as $item) { 
    if (!is_numeric_($item)) { 
     $allNumbers = false; 
     break; 
    } 
} 

// now $allNumbers is either true or false 

關於過濾功能:如果你只想讓人物09,要使用ctype_digit,需要提醒的是,這將不會允許負在前面簽字。

is_numeric將使跡象,但它也將讓浮點數字和十六進制數。

gettype將不會在這種情況下工作,因爲您的數組包含數字字符串,而不是數字。

0

你必須設置一個標誌,並期待在所有項目。

$isNumeric = true; 
foreach ($string_detecting_array as $key) { 
    if (!is_numeric($key)) { 
     $isNumeric = false; 
    } 
} 

if ($isNumeric) { 
    echo 'Yes all elements in array are type integer.'; 
} 
else { 
    echo "Not all elements in array were type integer."; 
} 
3

你可以鏈array_maparray_product得到一個班輪表達:

if (array_product(array_map('is_numeric', $string_detecting_array))) { 
    echo "all values are numeric\n"; 
} else { 
    echo "not all keys are numeric\n"; 
} 
1

您可以使用此:

$set = array(1,2,'a','a1','1'); 

if(in_array(false, array_map(function($v){return is_numeric($v);}, $set))) 
{ 
    echo 'Not all elements in array were type integer.'; 
} 
else 
{ 
    echo 'Yes all elements in array are type integer.'; 
} 
0

您可以創建自己的批量測試功能。它可能是你的工具類的靜態功能!

/** 
* @param array $array 
* @return bool 
*/ 
public static function is_all_numeric(array $array){ 
    foreach($array as $item){ 
     if(!is_numeric($item)) return false; 
    } 
    return true; 
}