2016-05-12 34 views
0

Diese Frage ist nicht ich versuche, eine bestimmte Zeichenfolge in einem Array zu finden. Ich würde gerne wissen, wie man am einfachsten überprüft, ob eine Zeichenfolge in einem Array existiert. Beispiel:Überprüfen Sie, ob PHP-Array eine nicht-spezifische Zeichenfolge enthält

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

Der beste Weg, ich geloopt durch alle Array-Elemente und Lauf is_string() auf jedem von ihnen so denken kann.

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

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

Das funktioniert, fühlt sich aber klobig an. Gibt es einen besseren Weg, dies zu tun, der keine Schleife durch das Array erfordert, oder ist das so gut wie es geht?

+3

Nun, Sie müssen Element für Element überprüfen, bis Sie eine Zeichenfolge finden oder nicht, um festzustellen, ob eine Zeichenfolge im Array ist. Das einzige, was Sie ändern können, ist, dass Sie Ihre Schleife in Ihrem Code unterbrechen, wenn Sie eine Zeichenfolge finden, damit Sie so schnell wie möglich aufhören können. – Rizier123

+0

array_walk, aber es ist am Ende wirklich dasselbe. –

+0

"oder ist das so gut wie es geht" - gut genug, wenn "Pause" verwendet wird und das Array hat eine große Menge an Werten – RomanPerekhrest

Antwort

2

können Sie array_filter verwenden zu überprüfen:

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

Ergebnis:

Array has string 
Array hasn't any strings 

Ihre Eval

+1

Danke, das ist mehr wie das, was ich wollte. Eine 1-Zeilen-Prüfung, um festzustellen, ob eine Zeichenfolge existiert oder nicht. Ich habe es in eine Variable in meinem Code gespeichert, um es einfacher zu verstehen und wiederzuverwenden: '$ arrayHasString = count (array_filter ($ array, 'is_string'));' –

+0

Ich könnte es tatsächlich in eine Funktion für noch besser machen Wiederverwendung. :) –

+0

'function array_has_string ($ array) { \t Rückgabewert (array_filter ($ array, 'is_string')); } ' –

0

Da es Art eine andere Antwort auf Thamilan Antwort ist jetzt, ich bin den Kommentar als Antwort posten.

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 
Verwandte Themen