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?

tuxnani
fonte
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
phparraylength.com
Camilo Martin

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.

Chibuzo
fonte
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 :(
Andreas Wong
fonte
@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.

Alix Axel
fonte
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.

ThiefMaster
fonte
6

Prefiro a count()função ao invés de sizeOf()como sizeOf()é apenas um alias de count()e não significa o mesmo em muitos outros idiomas. Muitos programadores esperam sizeof()retornar a quantidade de memória alocada.

Mithun Debnath
fonte
1
Também explicado aqui. stackoverflow.com/questions/3974385/php-array-count-or-sizeof Isso é importante uma vez que esta questão é agora um top Google atingido por sizeofvscount
Tim Ogilvy
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';
Kabir Hossain
fonte
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

Bono
fonte
2

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

if ( sizeof($arr) > 1) ...
Thariama
fonte
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.";
}
Dan Cron
fonte
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)
    }
Alex22
fonte