players
estará vazio ou uma lista separada por vírgula (ou um valor único). Qual é a maneira mais fácil de verificar se está vazia? Estou assumindo que posso fazê-lo assim que buscar a $gameresult
matriz $gamerow
? Nesse caso, provavelmente seria mais eficiente pular a explosão $playerlist
se ela estiver vazia, mas por uma questão de argumento, como eu verificaria se uma matriz também está vazia?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
Respostas:
Se você só precisa verificar se há QUALQUER elemento na matriz
Se você precisar limpar valores vazios antes de verificar (geralmente feito para evitar
explode
seqüências de caracteres estranhas):fonte
empty()
.if(!isset($emptyarray))
éfalse
apenasif(empty($emptyarray))
retornatrue
. Isso só me pregadoUma matriz vazia é falsey no PHP, então você nem precisa usar
empty()
como outros sugeriram.PHP da
empty()
determina se uma variável não existe ou tem um valor Falsey (comoarray()
,0
,null
,false
, etc).Na maioria dos casos, você apenas deseja verificar
!$emptyVar
. Useempty($emptyVar)
se a variável pode não ter sido definida E você não costuma acionar umE_NOTICE
; OMI geralmente é uma má idéia.fonte
Algumas respostas decentes, mas pensei em expandir um pouco para explicar mais claramente quando o PHP determinar se um array está vazio.
Notas principais:
Uma matriz com uma chave (ou chaves) será determinada como NÃO vazia pelo PHP.
Como os valores da matriz precisam de chaves para existir, ter valores ou não em uma matriz não determina se está vazio, apenas se não houver chaves (E, portanto, sem valores).
Portanto, verificar um array com
empty()
simplesmente não informa se você tem valores ou não, ele informa se o array está vazio e as chaves fazem parte de um array.Portanto, considere como você está produzindo sua matriz antes de decidir qual método de verificação usar.
EG Uma matriz terá chaves quando um usuário enviar seu formulário HTML quando cada campo de formulário tiver um nome de matriz (ou seja
name="array[]"
).Uma matriz não vazia será produzida para cada campo, pois haverá valores de chave incrementados automaticamente para a matriz de cada campo de formulário.
Veja estas matrizes, por exemplo:
Se você repetir as chaves e os valores das matrizes acima, obtém o seguinte:
E testar as matrizes acima com
empty()
retorna os seguintes resultados:Uma matriz sempre estará vazia quando você atribui uma matriz, mas não a usa posteriormente, como:
Isso ficará vazio, ou seja, o PHP retornará TRUE quando usado se estiver
empty()
acima.Portanto, se a sua matriz tiver chaves - seja por exemplo, os nomes de entrada de um formulário ou se você as atribuir manualmente (por exemplo, crie uma matriz com os nomes das colunas do banco de dados como as chaves, mas sem valores / dados do banco de dados), a matriz NÃO será
empty()
.Nesse caso, você pode fazer um loop na matriz em um foreach, testando se cada chave possui um valor. Esse é um bom método se você precisar executar a matriz de qualquer maneira, talvez verificando as chaves ou limpando os dados.
No entanto, não é o melhor método se você simplesmente precisar "se os valores existirem" retorna VERDADEIRO ou FALSO . Existem vários métodos para determinar se uma matriz possui algum valor quando sabe que terá chaves. Uma função ou classe pode ser a melhor abordagem, mas, como sempre, depende do seu ambiente e dos requisitos exatos, além de outras coisas, como o que você faz atualmente com a matriz (se houver).
Aqui está uma abordagem que usa muito pouco código para verificar se uma matriz possui valores:
Usando
array_filter()
:itera sobre cada valor na matriz, passando-os para a função de retorno de chamada. Se a função de retorno de chamada retornar true, o valor atual da matriz será retornado para a matriz de resultados. As chaves da matriz são preservadas.
A execução
array_filter()
nas três matrizes de exemplo (criadas no primeiro bloco de código nesta resposta) resulta no seguinte:Portanto, quando não há valores, sejam chaves ou não, use
array_filter()
para criar uma nova matriz e verifique se a nova matriz está vazia mostra se havia algum valor na matriz original.Não é o ideal e é um pouco confuso, mas se você tem uma matriz enorme e não precisa fazer uma repetição por qualquer outro motivo, esse é o mais simples em termos de código necessário.
Não tenho experiência em verificar despesas gerais, mas seria bom saber as diferenças entre usar
array_filter()
eforeach
verificar se um valor foi encontrado.Obviamente, o benchmark precisaria estar em vários parâmetros, em matrizes pequenas e grandes e quando houver valores e não etc.
fonte
array_filter()
count(array())==0
é falso quando há chaves e nenhum valor, portanto, isso não ajuda na verificação apenas de valores. Sua declaração está correta, mas você está forçando um teste comcount(array())
a matriz, é claro, vazia. Precisamos verificar quando a matriz retornou de um formulário ou em algum outro lugar para saber se está vazia (chaves / valores) ou se apenas tem valores ou nãoarray_filter($_FILES["documento"]['name'])
count($gamerow['players'])
será 0.fonte
Se você deseja verificar se a variável que você está testando é realmente uma matriz vazia, você pode usar algo como isto:
fonte
Se você deseja excluir as linhas falsas ou vazias (como
0 => ''
), onde o usoempty()
falhará, tente:Se você deseja remover todas as cadeias NULL, FALSE e vazias (
''
), mas deixar valores zero (0
), pode usarstrlen
como retorno de chamada, por exemplo:fonte
Por que ninguém disse esta resposta:
fonte
array()
é a mesma coisa.is_array
fonte
explode()
- ele retorna dados do tipo array. A verificaçãoempty()
é uma chamada de função desnecessária. Como afirma Cobby em 2012,if($detect)
é tudo o que é necessário. Esta solução não deve ser implementada para esta tarefa ou outras. Você pode argumentar que você está cobrindo situações além do escopo deste pergunta, bem, nunca há uma necessidade de chamarempty()
APÓSis_array()
porque se a variável não é "set", em seguida,is_array()
irá gerar "Aviso: Undefined variable", seisset()
, em seguida,empty()
é um exagero, use apenas A resposta do Cobby.Corri o benchmark incluído no final do post. Para comparar os métodos:
count($arr) == 0
: contagemempty($arr)
: vazio$arr == []
: comp(bool) $arr
: fundidae obteve os seguintes resultados
A diferença entre vazio e conversão para um booleano é insignificante. Eu executei esse teste várias vezes e eles parecem ser essencialmente equivalentes. O conteúdo das matrizes não parece desempenhar um papel significativo. Os dois produzem resultados opostos, mas a negação lógica mal é suficiente para levar o elenco à vitória na maioria das vezes, então eu pessoalmente prefiro vazio por razões de legibilidade em ambos os casos.
fonte
sizeof
qual é [não?] Alias deempty
... stackoverflow.com/a/51986794/1429432se você quiser verificar o conteúdo da matriz, poderá usar:
veja aqui: http://codepad.org/EORE4k7v
fonte
Na minha opinião, a maneira mais simples para uma matriz indexada seria simplesmente:
Uma condição 'if' na matriz seria avaliada como true se a matriz não estiver vazia e false se a matriz estiver vazia . Isso não é aplicável a matrizes associativas.
fonte
Eu uso esse código
Mas observe que, se a matriz tiver um grande número de chaves, esse código passará muito tempo contando-as, em comparação com as outras respostas aqui.
fonte
Você pode usar o
array_filter()
que funciona muito bem para todas as situações:fonte
fonte
Eu acho que a melhor maneira de determinar se a matriz está vazia ou não é usar count () assim:
fonte
count()
chamada pode ser totalmente removida - veja a resposta de Cobby.Tomar a decisão mais apropriada requer conhecer a qualidade dos seus dados e quais processos devem ser seguidos.
Se você vai desqualificar / desconsiderar / remover esta linha, o primeiro ponto de filtragem deve estar na consulta mysql.
WHERE players IS NOT NULL
WHERE players != ''
WHERE COALESCE(players, '') != ''
WHERE players IS NOT NULL AND players != ''
Se você não tiver 100% de certeza se a coluna existirá no conjunto de resultados, verifique se a coluna está declarada. Isto significa chamar
array_key_exists()
,isset()
ouempty()
na coluna. Não vou me incomodar em delinear as diferenças aqui (existem outras páginas de SO para esse detalhamento, aqui está um começo: 1 , 2 , 3 ). Dito isto, se você não estiver no controle total do conjunto de resultados, talvez tenha uma "flexibilidade" excessiva da aplicação e deva repensar se vale a pena o problema de acessar potencialmente dados inexistentes da coluna. Efetivamente, estou dizendo que você nunca deve verificar se uma coluna é declarada - portanto, você nunca precisaráempty()
dessa tarefa. Se alguém está argumentando queempty()
é mais apropriado, eles estão expondo sua própria opinião pessoal sobre a expressividade dos scripts. Se você achar que a condição no 5 abaixo é ambígua, adicione um comentário embutido ao seu código - mas não o faria. A conclusão é que não há vantagem programática em fazer a chamada de função.O valor da string pode conter um valor
0
que você deseja considerar verdadeiro / válido / não vazio? Nesse caso, você só precisa verificar se o valor da coluna tem comprimento.Aqui está uma demonstração usando
strlen()
. Isso indicará se a sequência criará ou não elementos significativos da matriz se explodida.Eu acho que é importante mencionar que, ao explodir incondicionalmente, você está GARANTIDO para gerar uma matriz não vazia. Aqui está a prova: Demonstração Em outras palavras, verificar se a matriz está vazia é completamente inútil - ela estará sempre vazia.
Se sua string NÃO POSSIVELMENTE conter um valor zero (porque, digamos, este é um csv que consiste em IDs que iniciam
1
e apenas incrementam),if ($gamerow['players']) {
é tudo o que você precisa - fim da história.... mas espere, o que você está fazendo depois de determinar o vazio desse valor? Se você tem algo em espera
$playerlist
, mas está declarando condicionalmente essa variável, corre o risco de usar o valor da linha anterior ou gerar novamente Avisos. Então, você precisa declarar incondicionalmente$playerlist
como algo ? Se não houver valores reais na cadeia, seu aplicativo se beneficia ao declarar uma matriz vazia? As chances são de que a resposta seja sim. Nesse caso, você pode garantir que a variável seja do tipo matriz, retornando a uma matriz vazia - dessa forma, não importará se você alimentar essa variável em um loop. As seguintes declarações condicionais são todas equivalentes.$playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];
Por que fui tão longe para explicar essa tarefa muito básica?
fonte
fonte
$matches = preg_grep ( "/^$text (\w+)/i" , $array ) ;
para verificá-la eu usoif ( count ( $matches ) > 0 )
empty()
faz muito trabalho.Resolvi esse problema com o seguinte código.
fonte
Isso parece funcionar para todos os casos
fonte
E se:
fonte