2012-04-05 15 views
174

Ho solo bisogno di controllare se un array ha più di un elemento. Sto cercando di fare in questo modo:Quale è un modo migliore per verificare se una matrice ha più di un elemento?

if (isset($arr['1'])) 

l'altro modo tradizionale è

if (sizeof($arr)>1) 

Quale delle due è migliore? In tali situazioni, come dovrei giudicare tra due metodi alternativi? Esiste un misuratore di controllo delle prestazioni disponibile per misurare quale sia il migliore?

+0

L'ipotesi qui è $ arr è già convalidata per un array! Ciò significa che, prima di arrivare a questo se il controllo delle condizioni, è già controllato se è un array. – tuxnani

+0

http://phparraylength.com/ –

risposta

336

Utilizzare questa

if (sizeof($arr) > 1) { 
    .... 
} 

O

if (count($arr) > 1) { 
    .... 
} 

sizeof() è un alias per count(), lavorano lo stesso.

Edit: Rispondere alla seconda parte della domanda: Le due linee di codici in questione non sono metodi alternativi, svolgono funzioni diverse. Il primo controlla se il valore su $arr['1'] è impostato, mentre il secondo restituisce il numero di elementi nell'array.

+8

@NB: La domanda è stata modificata, il codice iniziale era 'if (sizeof ($ arr))', che tradotto in 'if (sizeof ($ arr) == 1)' - chiaramente che doesn ' t controlla se la matrice ha ** più di un elemento **. Questa risposta è corretta, e non vedo alcun motivo per il down-vote, quindi il mio upvote. –

+2

Devo ammettere che non ho dato un'occhiata alla versione originale della domanda, a cui questa risposta è una risposta. Il contesto è diverso e mi scuso per aver etichettato la risposta come errata. Non è sbagliato, se guardi la domanda originale. È male per la domanda modificata. –

+0

Il secondo snippet di codice nella domanda controllerà se il valore di $ arr ['1'] è impostato o meno, non è preoccupato per il conteggio. Questo non è stato risolto nella risposta, ho solo pensato di menzionarlo e spero che l'autore della risposta aggiorni la risposta :). –

3

isset() controlla solo se una variabile è impostata .. non ha nulla a che fare con la dimensione o quello che l'array contiene

44

if(is_array($arr) && count($arr) > 1)

solo per essere sicuri che $ arr è davvero un array.

sizeof è un alias di count, preferisco utilizzare conteggio perché:

  1. 1 meno da digitare
  2. sizeof ad un'osservazione potrebbe significare una dimensione di un array in termini di memoria, troppo tecnica :(
+0

'is_array' non è necessario. –

+0

@AlixAxel hmm, ma se $ arr è una stringa, count ($ arr) restituirà il conteggio dei caratteri di quella stringa quindi ya –

+0

No, se '$ arr' è una stringa, restituirà' 1'. –

2

presumo $ arr è un array, allora questo è quello che stai cercando

if (sizeof($arr) > 1) ... 
5
if (count($arr) >= 2) 
{ 
    // array has at least 2 elements 
} 

sizeof() è un alias per count(). Entrambi funzionano anche con non-array, ma restituiranno solo valori superiori a 1 se l'argomento è o un array o un oggetto Countable, quindi con questo è abbastanza sicuro.

5

Ovviamente l'utilizzo di count($arr) > 1 (sizeof è solo un alias per count) è la soluzione migliore. A seconda della struttura dell'array, potrebbero esserci tonnellate di elementi ma nessun elemento $array['1'].

1

Il primo metodo if (isset($arr['1'])) non funziona su un array associativo.

Ad esempio, il codice seguente mostra "No, non più di uno".

$arr = array(
    'a' => 'apple', 
    'b' => 'banana', 
); 

if (isset($arr['1'])) { 
    echo "Yup, more than one."; 
} else { 
    echo "Nope, not more than one."; 
} 
6

preferisco la funzione invece di sizeOf() come sizeOf() è solo un alias di count() e non significa lo stesso in molte altre lingue count(). Molti programmatori si aspettano che sizeof() restituisca la quantità di memoria allocata.

+1

Anche spiegato qui. http://stackoverflow.com/questions/3974385/php-array-count-or-sizeof Questo è utile poiché questa domanda è ora un successo di Google per 'sizeof' vs' count' –

4

Per il controllo di un array vuoto() è migliore di sizeof().

Se la matrice contiene un'enorme quantità di dati. Ci vorranno più volte per contare le dimensioni dell'array. Ma controllare vuoti è sempre facile.

//for empty 
    if(!empty($array)) 
    echo 'Data exist'; 
    else 
    echo 'No data'; 


//for sizeof 
if(sizeof($array)>1) 
     echo 'Data exist'; 
else 
    echo 'No data'; 
Problemi correlati