2010-02-24 8 views

risposta

5

Non è possibile ottenere questo risultato senza controllare tutti gli elementi dell'array, ma è possibile utilizzare le funzioni dell'array incorporato per aiutarvi.

È possibile utilizzare array_filter a restituire un array. È necessario fornire la propria funzione di callback come secondo argomento per verificare la presenza di un tipo specifico. Questo verificherà se i numeri dell'array sono pari a.

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. 

Come per il commento di VolkerK, come di PHP 5.3+ si può anche passare in una funzione anonima come secondo argomento. Questo è l'equivalente dell'esempio sopra.

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

con PHP 5.3+ è anche possibile utilizzare funzioni anonime '$ newArray = array_filter ($ yourArr, function ($ x) {return 0 === $ x% 2; }); ' – VolkerK

+1

Il secondo esempio è fuorviante. Implica che l'implementazione dalla funzione 'even' nel primo esempio non possa essere utilizzata in una funzione anonima. Un ** _ true _ ** equivalente che utilizza una funzione anonima è: '$ newArray = array_filter ($ yourArr, function ($ x) {return (! ($ X & 1));});' –

3

C'è un modo semplice per verificare se tutti gli elementi di un array [qualcosa qualcosa di qualcosa] senza eseguire il ciclo di tutti gli elementi?

No. Non è possibile controllare tutti gli elementi di un array senza controllare tutti gli elementi della matrice.

Sebbene sia possibile utilizzare array_walk per salvare autonomamente la scrittura della caldaia.

0

È possibile anche combinare array_walk con create_function e utilizzare una funzione anonima per filtrare l'array. Qualcosa alon le linee di:

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

È necessario utilizzare virgolette singole o sfuggire a $ – goat

+1

In questo caso particolare, non è necessario creare una funzione: 'array_filter ($ array, 'is_int')'. Poiché 'is_int' restituisce un valore booleano, è tutto ciò che serve ... – 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

Ho effettivamente utilizzato la soluzione di filtro in quanto le mie esigenze modificate da questa risposta sono grandi! Che in realtà rispondono completamente alla domanda iniziale ed è davvero utile per la convalida Grazie – DiogoNeves

+0

Credo che i gettype debbano essere messi tra parentesi. – untill

Problemi correlati