2016-05-12 132 views
0

這個問題不是我試圖在數組內找到特定的字符串。我想知道檢查數組中是否存在字符串的最簡單方法。例如:檢查PHP數組是否包含非特定字符串

[1,2,3] // this does NOT contain a string 
[1,'two',3] // this DOES contain a string 

我能想到的是通過所有的數組項循環和運行IS_STRING()對他們每個人喜歡它的最好方法。

$array = [1,'two',3]; 
$hasString = false; 

foreach($array as $item){ 
    if (is_string($item)){ 
     $hasString = true; 
    } 
} 

這個工程,但感覺笨重。有沒有更好的方式來做到這一點,不需要像這樣循環訪問數組,或者這樣做好嗎?

+3

那麼你必須檢查每個元素,直到找到一個字符串,或者不是,來判斷數組中是否有字符串。所以你唯一可以改變的是,如果你找到一個字符串,你可以在你的代碼中循環,這樣你就可以儘快停下來。 – Rizier123

+0

array_walk,但最後它確實是一樣的。 – 2016-05-12 10:53:12

+0

「或者這樣就好了」 - 如果使用了break,並且該數組有大量值,那麼它就足夠了 – RomanPerekhrest

回答

2

您可以使用array_filter檢查過:

<?php 
function checkString($arr) { 
    if (count(array_filter($arr, 'is_string'))) { 
     return "Array has string"; 
    } else { 
     return "Array hasn't any strings"; 
    } 
} 

echo checkString([1,'two',3]); 
echo "<br/>"; 
echo checkString([1,2,3]); 

結果:

Array has string 
Array hasn't any strings 

Eval

+1

謝謝,這更像我以後的樣子。 1行檢查是否存在字符串。我將它保存到我的代碼中的一個變量中,以便於理解和重用:'$ arrayHasString = count(array_filter($ array,'is_string'));' –

+0

我可能會將它變成一個函數,再利用。 :) –

+0

'function array_has_string($ array){ \t return count(array_filter($ array,'is_string')); }' –

0

由於這是一種不同的答案Thamilan的答案現在,我發表評論作爲答案。

function array_has_string($array){ 
    return count(array_filter($array, 'is_string')) ? true : false; 
} 

$test_1 = array_has_string([1,'two',3]); 

//$test_1 = true 

$test_2 = array_has_string([1,2,3]); 

//$test_2 = false 
相關問題