PHP - Foreach

 
Vista:

Foreach

Publicado por Javier (3 intervenciones) el 13/04/2019 13:57:54
Buenas tardes,

Tengo dos arrays que recorrer y preguntar si el id de usuario que recojo con get_users es igual al que está en la tabla de ofertantes para seleccionarlo en el option del select. Si pongo bien los cierres de llaves del segundo foreach tengo bucle infinito. Ahora mismo solo me marca un usuario, a pesar de tener varios en ambas tablas.
¿Me pueden ayudar?

Gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$aUserso = get_users('orderby=login');
if (count($aUserso) != 0) {
	echo '<tr>';
	echo '<th scope="row">';
	echo '<label for="ofertantes">Ofertantes *</label>';
	echo '</th>';
	echo '<td>';
 
	echo '<span class="fa fa-user"></span> ';
	echo '<select name="ofertantes[]" id="ofertantes" size="10" multiple="multiple">';
 
	$ro = $wpdb->get_results("SELECT * FROM _ofertantes");
 
 
	foreach($aUserso as $oUsero) {
 
 
 
		foreach ($ro as $u) {
 
			$seleccionados = '';
 
			if ($u->id_usuario==$oUsero->ID) {
				$seleccionados = 'selected="selected"';
			}
		}
		echo '<option '.$seleccionados.' value="'.($oUsero->ID).'">'.($oUsero->data->user_login).' ('.$oUsero->data->user_email.')</option>';
	}
 
 
 
	echo '</select>';
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Foreach

Publicado por Alejandro (855 intervenciones) el 13/04/2019 16:10:22
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
No se si te da error de bucle infinito, error por superar el tiempo máximo del script o simplemente porque demora. Noto lo siguiente: El seleccionado solo se dará cuando $oUsero sea igual al ultimo de $u pues el foreach de $u continua hasta terminar el array sobrescribiendo la variable $seleccionados en cada iteración. Como podrás darte cuenta una vez encontrado el elemento buscado no es necesario seguir comparando los demás.

1
2
3
4
5
6
7
8
9
10
foreach($aUserso as $oUsero) {
	$seleccionados = '';
	foreach ($ro as $u) {
		if ($u->id_usuario==$oUsero->ID) {
			$seleccionados = 'selected="selected"';
			break;
		}
	}
	echo '<option '.$seleccionados.' value="'.($oUsero->ID).'">'.($oUsero->data->user_login).' ('.$oUsero->data->user_email.')</option>';
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Foreach

Publicado por javier (3 intervenciones) el 14/04/2019 13:20:06
Buenas Alejandro,

Le puse el break pero sigue con bucle infinito pintando usuarios repeditos varias veces. El option debe estar dentro del segundo foreach. Con el primero recorro usuarios y con el segundo una tabla ofertantes donde hay una columna con ids de usuarios, debo ir recorriendo ambas y comparando. Este es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
echo '<select name="ofertantes[]" id="ofertantes" size="10" multiple="multiple">';
 
	$ro = $wpdb->get_results("SELECT * FROM _ofertantes");
 
 
	foreach($aUserso as $oUsero) {
 
 
 
		foreach ($ro as $u) {
 
				$seleccionados = '';
 
				if ($u->id_usuario==$oUsero->ID) {
					$seleccionados = 'selected="selected"';
					break;
				}
 
			echo '<option '.$seleccionados.' value="'.($oUsero->ID).'">'.($oUsero->data->user_login).' ('.$oUsero->data->user_email.')</option>';
		}
	}
 
 
 
echo '</select>';
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Foreach

Publicado por Alejandro (855 intervenciones) el 14/04/2019 19:34:02
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Si el option lo metes dentro del segundo foreach obtendrás la lista con el numero de elemento donde se encontró la coincidencia de cada elemento del primer array. Ej. Si el primero elemento del array se encontró en el tercero del segundo array, apareces el primer elemento 2 veces ( el echo esta después del break).

¿Porque dices que es bucle infinito?
¿Que contienen tus arrays?


En el siguiente código te demuestro que funciona correcto y no hay bucle infinito.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Creo los arrays para realizar una simulación.
for($i=1; $i<=100; $i++){
	$aUno[] = $i;
	if($i%10==0){
		$aDos[] = $i;
	}
}
 
// Imprimo el contenido del primer arrray seleccionando las coincidencias con el segundo array
echo '<select multiple style="height:200px">';
	foreach($aUno as $u1){
		$cSeleted='';
		foreach($aDos as $u2){
			if($u1==$u2){
				$cSeleted='selected';
				break;
			}
		}
		echo "<option $cSeleted >$u1</option>";
	}
echo '</select>';
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Foreach

Publicado por javier (3 intervenciones) el 15/04/2019 11:04:23
Creo que ya lo tengo Alejandro. Mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar