¿Por qué se rompe el foreach siguiente?

Started by Jotade29, September 30, 2022, 08:28:54 PM

Previous topic - Next topic

Jotade29

Buenas comunidad. Primero que nada indicar que mi versión es la 2.0.19.

Estoy tratando de hacer ajustes a un mod, y aplicando la siguiente estructura, cuando introduzco la id de un quiz que NO EXISTE, se sale del bucle sin entrar en el else:


foreach($context['SMFQuiz']['quiz'] as $quizRow){
if(!empty($quizRow[id_quiz])){
Me cargue el quiz
}
else{
Tire el mensaje de error de que el quiz no existe
}

}




Está comprobado que $quizRow[id_quiz] muestra el número del quiz a cargar SI EXISTE, y si le introduzco cualquier número de quiz que NO EXISTE, no carga nada. Partimos de que tengo 4 quizes, es decir, que si entro en el quiz 1 me carga los datos del 1, y así hasta el 4.

En el siguiente código, lo que espero es que si la id es alguna de las que existe, es decir, 1, 2, 3, o 4, me muestre los datos del quiz, y con el else, entiendo que si está vacío me muestre lo que tiene dentro ese else.

El código, efectivamente, si la id que introduzco es del 1 al 4, me carga su contenido, pero si introduzco cualquiera que no existe no me va al else... directamente se sale del bucle. No entiendo el porqué de no cargarme el else.

¿Qué es lo que le ocurre al else? ¿Cómo podría ponerlo para que me cargue el contenido de los quizes que tengo, y si no existe el quiz me salte error (que es lo que pretendo hacer en el else)?

Gracias.
Quote from: Diego Andrés on August 12, 2023, 02:20:18 AMI'm afraid convincing Jotade to upgrade to SMF 2.1 will require bigger effort than your work sanitizing Unicode characters  :laugh:

Jotade29

Aprovecho el post para hacer una pregunta relacionada con el tema; no puedo editarlo ya :(

Si yo en una función hago un bucle foreach para ver un array, me imprime el array, cierro el bucle, ¿en los posterior a esa función podría usar la información de ese bucle sin necesidad de volver a declararlo?

Por ejemplo:

function showId(){
foreach($context['juegos'] as j){
echo $j[id_juegos];
}
//Aquí el foreach acaba
echo $j[id_juegos]; //¿Me mostraría esto?
}

Pregunto esto, porque he cerrado un bucle foreach, y he hecho un echo de un elemento de ese foreach posteriormente, y me lo ha mostrado. Pero si ese elemento lo pongo anterior al foreach no me muestra nada, y no veo mucho sentido a eso... Ya que me lo muestra FUERA del bucle, es decir, una vez cerrado.
Quote from: Diego Andrés on August 12, 2023, 02:20:18 AMI'm afraid convincing Jotade to upgrade to SMF 2.1 will require bigger effort than your work sanitizing Unicode characters  :laugh:

-Rock Lee-

Primero es preguntar ¿como tenes identado el código? puede ser por eso lo esta saltanto por que se va a otra función. Mas que else a mi me gusta hacer un if por que lo comprueba pero con un código tan corto no se como influye el resto del código, tenes tener en consideración eso... entre mas cosas agregas es mas fácil perder la linea de privilegios tiene cada llave. Y respecto al foreach digamos tiene lógica respetando a continuación, aunque tampoco del todo entiendo esa lógica puede por esta basado en ingles por eso...


Saludos!
¡Regresando como cual Fenix! ~ Bomber Code
Ayudas - Aportes - Tutoriales - Y mucho mas!!!

Danielㅤ

Hola,el foro tiene un tiempo para poder modificar los mensajes/posts y pasados ese tiempo ya no es posible modificarlos.


Saludos

Advertisement: