¿Cuál es una mejor manera de verificar si una matriz tiene más de un elemento?

177

Solo necesito verificar si una matriz tiene más de un elemento. Estoy tratando de hacerlo de esta manera:

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

la otra forma tradicional es

if (sizeof($arr)>1)

¿Cuál de los dos es mejor? En tales situaciones, ¿cómo debo juzgar entre dos métodos alternativos? ¿Hay algún medidor de verificación de rendimiento disponible para medir cuál es mejor?

tuxnani
fuente
¡La suposición aquí es que $ arr ya está validado para una matriz! Eso significa que, antes de que ocurra esto, si se verifica la condición, ya se verificó si es una matriz.
tuxnani
phparraylength.com
Camilo Martin

Respuestas:

342

Utilizar este

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

O

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

sizeof()es un alias para count(), funcionan igual.

Editar: Responder a la segunda parte de la pregunta: las dos líneas de códigos en la pregunta no son métodos alternativos, realizan diferentes funciones. El primero verifica si se establece el valor en $arr['1'], mientras que el segundo devuelve el número de elementos en la matriz.

Chibuzo
fuente
8
@NB: La pregunta fue editada, el código inicial fue if (sizeof($arr)), que se tradujo a if (sizeof($arr) == 1), claramente, eso no verifica si la matriz tiene más de un elemento. Esta respuesta es correcta, y no veo ninguna razón para rechazar el voto, de ahí mi voto a favor.
Alix Axel
2
Admito que no eché un vistazo a la versión original de la pregunta, a la que esta respuesta es una respuesta. El contexto es diferente, y me disculpo por etiquetar la respuesta como incorrecta. No está mal, si nos fijamos en la pregunta original. Es malo para la pregunta editada.
NB
El segundo fragmento de código en la pregunta verificará si el valor en $ arr ['1'] está configurado o no, no le preocupa el conteo. Esto no se abordó en la respuesta, solo pensé en mencionarlo y espero que el autor de la respuesta actualice la respuesta :).
Anders M.
@AndersM. gracias por señalar eso. Lo he reflejado en la respuesta.
Chibuzo
Me pongo algo como: <pre> <code> para el índice en 0 .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// su objeto predeterminado} predictionResult.append (testTop)} </code> < / pre> en swift 4
Alex22
44

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

Solo para estar seguro de que $ arr es de hecho una matriz.

sizeofes un alias de count, prefiero usar count porque:

  1. 1 personaje menos para escribir
  2. sizeof de un vistazo rápido puede significar un tamaño de una matriz en términos de memoria, demasiado técnico :(
Andreas Wong
fuente
@AlixAxel hmm, pero si $ arr es una cadena, count ($ arr) devolvería el recuento de caracteres de esa cadena, así que
Andreas Wong
No, si $arres una cadena, volverá 1.
Alix Axel
12
Del manual: Devuelve el número de elementos en la var. Si var no es una matriz o un objeto con una interfaz contable implementada, se devolverá 1. Hay una excepción, si var es NULL, se devolverá 0 .
Alix Axel
@AlixAxel oh ok ... wow, gracias, no sabía eso: o ... En cualquier caso, lo dejaré allí en caso de que OP quiera diferenciar entre una cadena y una matriz (independientemente del tamaño) Gracias por señalar eso :)
Andreas Wong
6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()es un alias para count(). Ambos funcionan también con no matrices, pero solo devolverán valores superiores a 1 si el argumento es una matriz o un Countableobjeto , por lo que está bastante seguro con esto.

Alix Axel
fuente
6

Obviamente, usar count($arr) > 1( sizeofes solo un alias para count) es la mejor solución. Dependiendo de la estructura de su matriz, puede haber toneladas de elementos pero ningún $array['1']elemento.

ThiefMaster
fuente
6

Prefiero la count()función en lugar de sizeOf()ya que sizeOf()es solo un alias de count()y no significa lo mismo en muchos otros idiomas. Muchos programadores esperan sizeof()devolver la cantidad de memoria asignada.

Mithun Debnath
fuente
1
También explicado aquí. stackoverflow.com/questions/3974385/php-array-count-or-sizeof Esto es valioso ya que esta pregunta ahora es un éxito de Google para sizeofvscount
Tim Ogilvy
4

Para verificar una matriz, empty () es mejor que sizeof ().

Si la matriz contiene una gran cantidad de datos. Llevará más tiempo contar el tamaño de la matriz. Pero verificar vacío siempre es fácil.

//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';
Kabir Hossain
fuente
3

isset () solo comprueba si se establece una variable. No tiene nada que ver con el tamaño o lo que contiene la matriz

Bono
fuente
2

Supongo que $ arr es una matriz, entonces esto es lo que estás buscando

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

El primer método if (isset($arr['1'])) no funcionará en una matriz asociativa.

Por ejemplo, el siguiente código muestra "No, no más de uno".

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

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

Hago mi matriz en bucle y me llenan los valores predeterminados en consecuencia en 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)
    }
Alex22
fuente