2010-02-24 17 views

Respuesta

5

No puede lograr esto sin verificar todos los elementos de la matriz, pero puede usar funciones de matriz incorporadas para ayudarlo.

Puede usar array_filter para devolver una matriz. Debe proporcionar su propia función de devolución de llamada como segundo argumento para buscar un tipo específico. Esto verificará si los números de la matriz son incluso.

function even($var){ 
    return(!($var & 1)); 
} 

// assuming $yourArr is an array containing integers. 
$newArray = array_filter($yourArr, "even"); 
// will return an array with only even integers. 

Según el comentario de VolkerK, a partir de PHP 5.3+ también puede pasar una función anónima como segundo argumento. Este es el equivalente en el ejemplo anterior.

$newArray = array_filter($yourArr, function($x) { return 0===$x%2; }); 
+2

con PHP 5.3+ también se puede utilizar funciones anónimas '$ newArray = array_filter ($ yourArr, la función ($ x) {return 0 === $ x% 2; }); ' – VolkerK

+1

El segundo ejemplo es engañoso. Implica que la implementación de la función 'par 'en el primer ejemplo no se puede usar en una función anónima. Un equivalente ** ** verdadero ** con una función anónima es: '$ newArray = array_filter ($ yourArr, function ($ x) {return (! ($ X & 1));});' –

3

¿Hay alguna manera simple de verificar si todos los elementos de una matriz [algo algo algo] sin hacer un bucle de todos los elementos?

No. No puede verificar todos los elementos de una matriz sin verificar todos los elementos de la matriz.

Aunque puede usar array_walk para ahorrar usted mismo escribiendo la placa repetitiva usted mismo.

0

También se pueden combinar con array_walkcreate_function y utilizar una función anónima para filtrar la matriz. Algo Alon las líneas de:

$filtered_array = array_filter($array, create_function('$e', 'return is_int($e)')) 
+0

Necesita usar comillas simples, o escapar de $ con una barra invertida. – goat

+1

En este caso particular, no hay necesidad de crear una función: 'array_filter ($ array, 'is_int')'. Como 'is_int' devuelve un booleano, eso es todo lo que necesita ... – ircmaxell

4
$s = array("abd","10","10.1"); 
$s = array_map(gettype , $s); 
$t = array_unique($s) ; 
if (count($t) == 1 && $t[0]=="string"){ 
    print "ok\n"; 
} 
+0

De hecho utilicé la solución de filtro ya que mis requisitos cambiados por esta respuesta es genial! Eso en realidad responde completamente la pregunta inicial y es realmente útil para la validación. Gracias. – DiogoNeves

+0

Creo que gettype debe ponerse entre paréntesis. – untill

Cuestiones relacionadas