2012-02-06 105 views

回答

8

請參見:PHP的is_string()is_numeric()功能。

array_filter相結合,就可以比較兩個數組,看看它們是否相等。

function isStringOrNumeric($in) { 
// Return true if $in is either a string or numeric 
    return is_string($in) || is_numeric($in); 
} 

class Test{} 

$a = array('one', 2, 'three', new Test()); 
$b = array_filter($a, 'isStringOrNumeric'); 

if($b === $a) 
    echo('Success!'); 
else 
    echo('Fail!'); 
+0

如果他需要分別在每個字段上存儲數據,那麼效果會非常好,但是當您只需要整個數組中的一個值時效率很低,不是嗎? – Vyktor 2012-02-06 21:54:58

+0

我的歉意,錯了。我已經更新它使用array_filter,但我仍然認爲這個解決方案將遍歷數組兩次(但我相信是不可避免的) – 2012-02-06 22:05:54

+0

我明白你的函數的邏輯,但我認爲很多程序員忘了「老方法」去思考以程序方式和順序方式處理事物。看看我的答案,誠實地告訴我你喜歡什麼。 – Vyktor 2012-02-06 22:21:03

3

如果你正在尋找通過數組做一次運行,你可以寫自己的函數根據您的具體標準檢查每個值。喜歡的東西:

function is_string_or_numeric($var) 
{ 
    return is_string($var) || is_numeric($var); 
} 

然後您可以篩選陣列,如:

if (array_filter($arr, 'is_string_or_numeric') === $arr) 
0

嗯,這真的取決於你所說的「字符串或數字」是什麼(這可能意味着is_numeric(X),或is_int(X) || is_string(X),或任何數量的其他東西)。也許最有效的方法(雖然它是更冗長)是這樣的:

public function isValid(array $array) { 
    $valid = TRUE; 

    foreach ($arr as $value) { 
     if (!is_int($value) && !is_string($value)) { 
      $valid = FALSE; 
      break; 
     } 
    } 

    return $valid; 
} 
7

更有效的將是這樣:

function isStringNumberArray($array){ 
    foreach($array as $val){ 
    if(!is_string($val) && !is_numeric($val)){ 
     return false; 
    } 
    } 
    return true; 
} 

這種方法:

  • 不會創建新的數組
  • 將在第一個無效值後停止
0

很多這個問題的答案。如果你想使用你一直使用的方法,你會想爲此編寫自己的函數。

所以你要檢查陣列中的每個元素,如果它是一個數字:

function isNumber($array_element) { 
    return is_numeric($array_element); 
} 

,然後調用使用array_filter

if (array_filter($arr, 'is_number') { 
    // is a number code here. 
} 

該測試功能,您寫了一個函數「 IS_STRING()「?如果不是,array_filter($arr, 'is_string')可能不會按照您認爲的方式工作)。

+1

難道你acheive同樣的事情,用更少的代碼,如果你只是跑,如果(array_filter($改編,「is_numeric」),而不是創建一個新的功能。 – 2014-05-20 16:51:06

+0

似乎題外話我 – 2017-10-10 16:05:52

0

兩個事實:

  • 的foreach比array_map()更快,因爲它不使用===運營商比is_int/IS_STRING快,像這​​樣調用每個迭代
  • 功能:

    if ((int)$value === $value) echo "its an int";

    if ((string)$value === $value) echo "its a string";

相關問題