¿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?


¡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

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.


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 :(

@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.


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.




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';

3

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


2

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

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

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.";
}

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)
    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.