players
estará vacío o una lista separada por comas (o un solo valor). ¿Cuál es la forma más fácil de verificar si está vacío? ¿Asumo que puedo hacerlo tan pronto como busque la $gameresult
matriz $gamerow
? En este caso, probablemente sería más eficiente omitir la explosión $playerlist
si está vacío, pero por razones de argumento, ¿cómo verificaría si una matriz también está vacía?
$gamerow = mysql_fetch_array($gameresult);
$playerlist = explode(",", $gamerow['players']);
Respuestas:
Si solo necesita verificar si hay CUALQUIER elemento en la matriz
Si necesita limpiar los valores vacíos antes de verificar (generalmente para evitar
explode
la aparición de cadenas extrañas):fuente
empty()
.if(!isset($emptyarray))
esfalse
peroif(empty($emptyarray))
vuelvetrue
. Eso me clavóUna matriz vacía es falsey en PHP, por lo que ni siquiera necesita usarla
empty()
como otros han sugerido.PHP
empty()
determina si una variable no existe o tiene un valor Falsey- (comoarray()
,0
,null
,false
, etc).En la mayoría de los casos, solo desea verificar
!$emptyVar
. Úseloempty($emptyVar)
si la variable puede no haber sido establecida Y NO va a activar unE_NOTICE
; En mi opinión, esto es generalmente una mala idea.fuente
Algunas respuestas decentes, pero solo pensé en expandirme un poco para explicar más claramente cuando PHP determina si una matriz está vacía.
Notas principales:
PHP determinará una matriz con una clave (o claves) como NO vacía .
Como los valores de la matriz necesitan claves para existir, tener valores o no en una matriz no determina si está vacía, solo si no hay claves (Y, por lo tanto, no hay valores).
Por lo tanto, verificar una matriz con
empty()
no solo le dice si tiene valores o no, le dice si la matriz está vacía y las claves son parte de una matriz.Así que considere cómo está produciendo su matriz antes de decidir qué método de verificación usar.
Por ejemplo, una matriz tendrá claves cuando un usuario envíe su formulario HTML cuando cada campo de formulario tenga un nombre de matriz (es decir
name="array[]"
).Se generará una matriz no vacía para cada campo, ya que habrá valores clave de incremento automático para la matriz de cada campo de formulario.
Tome estos arreglos por ejemplo:
Si repite las claves y los valores de las matrices anteriores, obtendrá lo siguiente:
Y probar las matrices anteriores con
empty()
devuelve los siguientes resultados:Una matriz siempre estará vacía cuando asigne una matriz, pero no la use a partir de entonces, como por ejemplo:
Esto estará vacío, es decir, PHP devolverá VERDADERO cuando se use if
empty()
en lo anterior.Entonces, si su matriz tiene claves, ya sea por ejemplo, por los nombres de entrada de un formulario o si los asigna manualmente (es decir, cree una matriz con nombres de columnas de la base de datos como las claves pero sin valores / datos de la base de datos), entonces la matriz NO lo será
empty()
.En este caso, puede recorrer la matriz en un foreach, probando si cada clave tiene un valor. Este es un buen método si necesita ejecutar la matriz de todos modos, tal vez verificando las claves o desinfectando los datos.
Sin embargo, no es el mejor método si simplemente necesita saber "si existen valores" devuelve VERDADERO o FALSO . Existen varios métodos para determinar si una matriz tiene algún valor cuando se sabe que tendrá claves. Una función o clase puede ser el mejor enfoque, pero como siempre depende de su entorno y requisitos exactos, así como de otras cosas como lo que hace actualmente con la matriz (si corresponde).
Aquí hay un enfoque que usa muy poco código para verificar si una matriz tiene valores:
Uso
array_filter()
:Itera sobre cada valor en la matriz pasándolos a la función de devolución de llamada. Si la función de devolución de llamada devuelve verdadero, el valor actual de la matriz se devuelve a la matriz de resultados. Se conservan las claves de matriz.
La ejecución
array_filter()
en las tres matrices de ejemplo (creadas en el primer bloque de código en esta respuesta) da como resultado lo siguiente:Entonces, cuando no hay valores, ya sea que haya claves o no, el uso
array_filter()
para crear una nueva matriz y luego verificar si la nueva matriz está vacía muestra si hubo valores en la matriz original.No es ideal y un poco desordenado, pero si tiene una gran matriz y no necesita recorrerla por ningún otro motivo, entonces este es el más simple en términos de código necesario.
No tengo experiencia en verificar gastos generales, pero sería bueno saber las diferencias entre usar
array_filter()
yforeach
verificar si se encuentra un valor.Obviamente, el punto de referencia debería estar en varios parámetros, en matrices pequeñas y grandes y cuando hay valores y no, etc.
fuente
array_filter()
count(array())==0
es falso cuando hay claves y no hay valores, por lo que esto no ayuda a verificar solo los valores. Su declaración es correcta, pero está forzando una pruebacount(array())
ya que la matriz está, por supuesto, vacía. Necesitamos verificar cuándo la matriz ha regresado de un formulario o de otro lugar para saber si está vacía (claves / valores) o si solo tiene valores o noarray_filter($_FILES["documento"]['name'])
count($gamerow['players'])
será 0.fuente
Si desea determinar si la variable que está probando es realmente una matriz vacía, puede usar algo como esto:
fuente
Si desea excluir las filas falsas o vacías (como
0 => ''
), donde el usoempty()
fallará, puede intentar:Si desea eliminar todas las cadenas NULL, FALSE y empty (
''
), pero deja valores cero (0
), puede usarlasstrlen
como callback, por ejemplo:fuente
¿Por qué nadie ha dicho esta respuesta?
fuente
array()
es lo mismo.===
lugar de hacerlo==
, ya que es más rápido.is_array
fuente
explode()
: devuelve datos de tipo matriz. La comprobaciónempty()
es una llamada de función innecesaria. Como lo indicó Cobby en 2012,if($detect)
es todo lo que se requiere. Esta solución no debe implementarse para esta tarea u otras. Se podría argumentar que se está cubriendo situaciones más allá del alcance de esta pregunta, bueno, nunca hay una necesidad de llamarempty()
DESPUÉSis_array()
porque si la variable no es "conjunto", a continuación,is_array()
va a generar "Aviso: Undefined variable", siisset()
a continuación,empty()
es un exceso, el uso justo La respuesta de Cobby.Ejecuté el punto de referencia incluido al final de la publicación. Para comparar los métodos:
count($arr) == 0
: cuentaempty($arr)
: vacío$arr == []
: comp(bool) $arr
: emitiry obtuve los siguientes resultados
La diferencia entre vaciar y lanzar a un booleano es insignificante. He ejecutado esta prueba varias veces y parecen ser esencialmente equivalentes. El contenido de las matrices no parece jugar un papel importante. Los dos producen los resultados opuestos, pero la negación lógica es apenas suficiente para impulsar el lanzamiento a ganar la mayor parte del tiempo, por lo que personalmente prefiero vacío en aras de la legibilidad en cualquier caso.
fuente
sizeof
cuál es [no?] Alias deempty
... stackoverflow.com/a/51986794/1429432===
lugar de==
.si va a verificar el contenido de la matriz que puede usar:
ver aquí: http://codepad.org/EORE4k7v
fuente
En mi opinión, la forma más simple para una matriz indexada sería simplemente:
Una condición 'if' en la matriz se evaluaría como verdadera si la matriz no está vacía y falsa si la matriz está vacía . Esto no es aplicable a las matrices asociativas.
fuente
Yo uso este codigo
Pero tenga en cuenta que si la matriz tiene una gran cantidad de claves, este código pasará mucho tiempo contándolas, en comparación con las otras respuestas aquí.
fuente
Puede usar
array_filter()
cuál funciona muy bien para todas las situaciones:fuente
fuente
Creo que la mejor manera de determinar si la matriz está vacía o no es usar count () de esta manera:
fuente
count()
llamada se puede eliminar por completo; consulte la respuesta de Cobby.Tomar la decisión más adecuada requiere conocer la calidad de sus datos y qué procesos seguir.
Si va a descalificar / ignorar / eliminar esta fila, entonces el primer punto de filtración debe estar en la consulta mysql.
WHERE players IS NOT NULL
WHERE players != ''
WHERE COALESCE(players, '') != ''
WHERE players IS NOT NULL AND players != ''
Si no está 100% seguro de si la columna existirá en el conjunto de resultados, debe verificar que la columna esté declarada. Esto significa llamar
array_key_exists()
,isset()
oempty()
en la columna. No voy a molestarme en delinear las diferencias aquí (hay otras páginas SO para ese desglose, aquí hay un comienzo: 1 , 2 , 3 ). Dicho esto, si no tiene el control total del conjunto de resultados, entonces quizás haya sobrecargado la "flexibilidad" de la aplicación y deba repensar si vale la pena el problema de acceder potencialmente a datos de columna inexistentes. Efectivamente, estoy diciendo que nunca debería necesitar verificar si se declara una columna; ergo, nunca debería necesitarempty()
para esta tarea. Si alguien está discutiendo esoempty()
es más apropiado, entonces están presionando su propia opinión personal sobre la expresividad de los scripts. Si encuentra que la condición en el n. ° 5 a continuación es ambigua, agregue un comentario en línea a su código, pero no lo haría. La conclusión es que no hay una ventaja programática para realizar la llamada a la función.¿Podría su valor de cadena contener un valor
0
que desea considerar verdadero / válido / no vacío? Si es así, solo necesita verificar si el valor de la columna tiene longitud.Aquí hay una demostración usando
strlen()
. Esto indicará si la cadena creará o no elementos de matriz significativos si explota.Creo que es importante mencionar que al explotar incondicionalmente, está GARANTIZADO de generar una matriz no vacía. Aquí está la prueba: Demostración En otras palabras, verificar si la matriz está vacía es completamente inútil; siempre estará no vacía.
Si su cadena NO POSIBLEMENTE contendrá un valor cero (porque, por ejemplo, este es un csv que consta de identificadores que comienzan desde
1
y solo se incrementan), entoncesif ($gamerow['players']) {
es todo lo que necesita: fin de la historia.... pero espera, ¿qué haces después de determinar el vacío de este valor? Si tiene algo de script descendente que está esperando
$playerlist
, pero declara condicionalmente esa variable, entonces se arriesga a usar el valor de la fila anterior o generar nuevamente Avisos. Entonces, ¿necesitas declarar incondicionalmente$playerlist
como algo ? Si no hay valores verdaderos en la cadena, ¿se beneficia su aplicación de declarar una matriz vacía? Lo más probable es que la respuesta sea sí. En este caso, puede asegurarse de que la variable sea del tipo de matriz volviendo a una matriz vacía; de esta manera, no importará si alimenta esa variable en un bucle. Las siguientes declaraciones condicionales son todas equivalentes.$playerlist = $gamerow['players'] ? explode(',', $gamerow['players']) : [];
¿Por qué me he tomado tanto tiempo para explicar esta tarea tan básica?
fuente
fuente
$matches = preg_grep ( "/^$text (\w+)/i" , $array ) ;
para comprobarlo. Usoif ( count ( $matches ) > 0 )
empty()
está haciendo demasiado trabajo.He resuelto este problema con el siguiente código.
fuente
Esto parece funcionar para todos los casos
fuente
Qué tal si:
fuente