2016-05-12 168 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 
相关问题