Qual è il modo migliore per verificare se un array ha più di un elemento?


177

Devo solo verificare se un array ha più di un elemento. Sto cercando di farlo in questo modo:

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

l'altro modo tradizionale è

if (sizeof($arr)>1)

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


Il presupposto qui è che $ arr sia già stato validato per un array! Ciò significa che, prima di arrivare a questo se il controllo delle condizioni, è già verificato se è un array.
tuxnani,

Risposte:


342

Usa questo

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

O

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

sizeof()è un alias per count(), funzionano allo stesso modo.

Modifica: risposta alla seconda parte della domanda: le due righe di codice nella domanda non sono metodi alternativi, ma svolgono funzioni diverse. Il primo controlla se $arr['1']è impostato il valore at , mentre il secondo restituisce il numero di elementi nell'array.


8
@NB: la domanda è stata modificata, il codice iniziale è stato if (sizeof($arr))tradotto in if (sizeof($arr) == 1)- chiaramente ciò non controlla se l'array ha più di un elemento. Questa risposta è corretta e non vedo alcun motivo per votare in basso, quindi il mio voto.
Alix Axel,

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 alla domanda originale. Fa male alla domanda modificata.
NB

Il secondo frammento di codice nella domanda controllerà se il valore in $ arr ['1'] è impostato o meno, non è preoccupato per il conteggio. Questo non è stato affrontato nella risposta, ho pensato di menzionarlo e spero che l'autore della risposta aggiornerà la risposta :).
Anders M.,

@AndersM. Grazie per la segnalazione. L'ho riflesso nella risposta.
Chibuzo,

Indosso qualcosa del tipo: <pre> <code> per l'indice in 0 .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// your default object} predictionResult.append (testTop)} </code> < / pre> in rapido 4
Alex22

44

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

Solo per essere sicuri che $ arr sia davvero un array.

sizeofè un alias di count, preferisco usare count perché:

  1. 1 carattere in meno da digitare
  2. dimensioni di una rapida occhiata potrebbero significare una dimensione di un array in termini di memoria, troppo tecnica :(

@AlixAxel hmm, ma se $ arr è una stringa, count ($ arr) restituirebbe il conteggio dei caratteri di quella stringa in modo che tu
Andreas Wong,

No, se $arrè una stringa, tornerà 1.
Alix Axel,

12
Dal manuale: restituisce il numero di elementi in var. Se var non è un array o un oggetto con l'interfaccia numerabile implementata, verrà restituito 1. C'è un'eccezione, se var è NULL, verrà restituito 0 .
Alix Axel,

@AlixAxel oh ok ... wow grazie, non lo sapevo: o ... In ogni caso lo lascerò lì nel caso OP volesse distinguere tra una stringa e una matrice (indipendentemente dalle dimensioni) Grazie per indicare che fuori :)
Andreas Wong,

6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()è un alias per count(). Entrambi funzionano anche con non array, ma restituiranno valori maggiori di 1 solo se l'argomento è un array o un Countableoggetto , quindi sei al sicuro con questo.


6

Ovviamente usare 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 $array['1']elemento.




4

Per controllare un array vuoto () è meglio di sizeof ().

Se l'array contiene un'enorme quantità di dati. Ci vorranno più volte per contare le dimensioni dell'array. Ma controllare vuoto è 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';

3

isset () controlla solo se è impostata una variabile. Non ha nulla a che fare con le dimensioni o con ciò che contiene l'array


2

Suppongo che $ arr sia un array, quindi questo è quello che stai cercando

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

1

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

Ad esempio, il codice seguente visualizza "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.";
}

0

Eseguo il looping dell'array e ottengo i valori predefiniti riempiti di conseguenza in Swift 4/5

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.