2016-05-12 37 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しかし、それは本当に最後に同じです。 –

+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]); 

結果:それは今Thamilanの答えに異なる答えのようなものですので

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リターンカウント(array_filter($ array、 'is_string'))); } ' –

0

、私はあなたコメントを回答として投稿します。

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 
関連する問題