我有一個值的數組,我想檢查所有的值是字符串或數字。什麼是最有效的方法來做到這一點?PHP檢查是否有任何數組值不是字符串或數字?
目前我只是檢查字符串,所以我只是做if (array_filter($arr, 'is_string') === $arr)
這似乎是工作。
我有一個值的數組,我想檢查所有的值是字符串或數字。什麼是最有效的方法來做到這一點?PHP檢查是否有任何數組值不是字符串或數字?
目前我只是檢查字符串,所以我只是做if (array_filter($arr, 'is_string') === $arr)
這似乎是工作。
請參見: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!');
PHP的ctype函數,具體ctype_alpha()
和ctype_digit()
也值得一看:
如果你正在尋找通過數組做一次運行,你可以寫自己的函數根據您的具體標準檢查每個值。喜歡的東西:
function is_string_or_numeric($var)
{
return is_string($var) || is_numeric($var);
}
然後您可以篩選陣列,如:
if (array_filter($arr, 'is_string_or_numeric') === $arr)
嗯,這真的取決於你所說的「字符串或數字」是什麼(這可能意味着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;
}
更有效的將是這樣:
function isStringNumberArray($array){
foreach($array as $val){
if(!is_string($val) && !is_numeric($val)){
return false;
}
}
return true;
}
這種方法:
很多這個問題的答案。如果你想使用你一直使用的方法,你會想爲此編寫自己的函數。
所以你要檢查陣列中的每個元素,如果它是一個數字:
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')
可能不會按照您認爲的方式工作)。
難道你acheive同樣的事情,用更少的代碼,如果你只是跑,如果(array_filter($改編,「is_numeric」),而不是創建一個新的功能。 – 2014-05-20 16:51:06
似乎題外話我 – 2017-10-10 16:05:52
兩個事實:
功能:
if ((int)$value === $value) echo "its an int";
if ((string)$value === $value) echo "its a string";
如果他需要分別在每個字段上存儲數據,那麼效果會非常好,但是當您只需要整個數組中的一個值時效率很低,不是嗎? – Vyktor 2012-02-06 21:54:58
我的歉意,錯了。我已經更新它使用array_filter,但我仍然認爲這個解決方案將遍歷數組兩次(但我相信是不可避免的) – 2012-02-06 22:05:54
我明白你的函數的邏輯,但我認爲很多程序員忘了「老方法」去思考以程序方式和順序方式處理事物。看看我的答案,誠實地告訴我你喜歡什麼。 – Vyktor 2012-02-06 22:21:03