Qual é a melhor maneira de verificar se uma matriz possui mais de um elemento?


177

Eu só preciso verificar se uma matriz tem mais de um elemento. Eu estou tentando fazer desta maneira:

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

a outra maneira tradicional é

if (sizeof($arr)>1)

Qual dos dois é melhor? Em tais situações, como devo julgar entre dois métodos alternativos? Existe algum medidor de verificação de desempenho disponível para medir qual é o melhor?


A suposição aqui é $ arr já está validada para uma matriz! Isso significa que, antes que chegue a isso, se a verificação de condição, já está marcada, se é uma matriz.
Tuxnani

Respostas:


342

Usa isto

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

Ou

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

sizeof()é um alias para count(), eles funcionam da mesma maneira.

Editar: Respondendo à segunda parte da pergunta: As duas linhas de códigos da pergunta não são métodos alternativos, elas executam funções diferentes. O primeiro verifica se o valor em $arr['1']está definido, enquanto o segundo retorna o número de elementos na matriz.


8
@ NB: A questão foi editada, o código inicial foi if (sizeof($arr))traduzido para if (sizeof($arr) == 1)- claramente, isso não verifica se a matriz possui mais de um elemento. Esta resposta está correta, e não vejo razão para votar em baixa, daí o meu voto positivo.
Alix Axel

2
Admito que não dei uma olhada na versão original da pergunta, à qual esta resposta é uma resposta. O contexto é diferente e peço desculpas por rotular a resposta como errada. Não está errado, se você olhar para a pergunta original. Isso é ruim para a pergunta editada.
NB

O segundo trecho de código na pergunta verificará se o valor em $ arr ['1'] está definido ou não, não está preocupado com a contagem. Isso não foi abordado na resposta, apenas pensei em mencionar isso e espero que o autor da resposta atualize a resposta :).
Anders M.

@AndersM. Obrigado por apontar isso. Eu refleti isso na resposta.
Chibuzo

Eu uso algo como: <pre> <code> para índice em 0 .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// seu objeto padrão} predictionResult.append (testTop)} </code> < / pre> em rápida 4
Alex22

44

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

Apenas para ter certeza de que $ arr é realmente uma matriz.

sizeofé um alias de count, eu prefiro usar count porque:

  1. 1 caractere a menos para digitar
  2. sizeof rapidamente pode significar o tamanho de uma matriz em termos de memória, também muito técnico :(

@AlixAxel hmm, mas se $ arr é uma string, count ($ arr) voltaria contagem de caracteres dessa string assim ya
Andreas Wong

Não, se $arrfor uma string, ela retornará 1.
Alix Axel

12
Do manual: Retorna o número de elementos em var. Se var não for uma matriz ou um objeto com a interface Contável implementada, 1 será retornado. Há uma exceção, se var for NULL, 0 será retornado .
Alix Axel

@AlixAxel oh ok ... uau, obrigado, não sabia que: o ... Em todo caso, vou deixar lá caso OP queira diferenciar entre uma String e uma matriz (independentemente do tamanho) Obrigado por apontar isso :) :)
Andreas Wong

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

sizeof()é um alias para count(). Ambos funcionam com não-matrizes também, mas retornarão valores maiores que 1 se o argumento for uma matriz ou um Countableobjeto , portanto, você estará bastante seguro com isso.


6

Obviamente, usar count($arr) > 1( sizeofé apenas um apelido para count) é a melhor solução. Dependendo da estrutura da sua matriz, pode haver vários elementos, mas nenhum $array['1']elemento.




4

Para verificar uma matriz vazia () é melhor que sizeof ().

Se a matriz contiver uma quantidade enorme de dados. Levará mais tempo para contar o tamanho da matriz. Mas verificar o vazio é sempre 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 () apenas verifica se uma variável está definida. Não tem nada a ver com tamanho ou com o que a matriz contém


2

Presumo que $ arr é uma matriz, então é isso que você está procurando

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

1

O primeiro método if (isset($arr['1'])) não funcionará em uma matriz associativa.

Por exemplo, o código a seguir exibe "Não, não mais que um".

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

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

0

Eu faço meu array em loop e obtendo os padrões preenchidos adequadamente no 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)
    }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.