No mostrar dato vacio

Estado
No está abierto para más respuestas.
Mensajes
213
Puntuación de reacción
0
Buenas gente, la verdad es que no tenia muy claro donde crear el post si aqui o en la seccion de wp, al final me he decidido aqui ya que aunque trabaje en wp es tema de codigos basicamente.

Explico un poquito para que asi podais entender lo que quiero hacer (es mas bien sencillo)
Estoy añadiendo un script de frases aleatorias, el script funciona bien, el problema..si el array está vacio, no imprime nada en lugar de buscar de nuevo datos...la cuestion es que ando haciendolo con el options framework, con un simple campo de texto, el codigo en un principio viene a ser asi (iria de $frase1 hasta $frase10):

PHP:
if(of_get_option('eslogan1_text') !='') {
	$frase1 = of_get_option('eslogan1_text');
	}

esta parte es sencilla de entender...si el campo "eslogan1_text" es distinto de vacio entonces añade el dato en $frase1 (como digo iria asi hasta el $frase10)

¿por que lo añado a la variable $frase1? sencillo por que asi uso esa variable para el array:

PHP:
$frases = array( 
	
	0 => $frase1,
	1 => $frase2,
	2 => $frase3,
	3 => $frase4,
	4 => $frase5,
	5 => $frase6,
	6 => $frase7,
	7 => $frase8,
	8 => $frase9,
	9 => $frase10	
	);

Hasta ahí todo bien...ahora viene la parte que me he quedado atascado y que sinceramente no tengo idea de como seguir, y es que si $frase(numero) está vacío entonces que siga leyendo datos del array hasta que encuentre uno que si que este lleno y entonces lo imprima en pantalla, el por que de esto es por que aunque hay puesto para añadir 10 frases, ¿que pasa si por ejemplo añadimos solo 6? el rand iría imprimiendo frases en pantalla, la cuestión es que recorre del 0 al 9 y si algún campo esta vacío, simplemente se imprime como vacío en pantalla, por eso lo que necesitaría hacer es que si esta vacío, entonces ejecute de nuevo el rand para imprimir uno que si que tenga datos,, en pocas palabras que si por ejemplo solo hay 6 frases añadidas en lugar de las 10 haga el rand de esas 6 frases solamente y sean las que se ven impresas en pantalla (sin que se quede vacío el campo),, hasta ahora lo había hecho así, pero sigue imprimiendo datos vacíos igualmente por lo que no tiene ningún sentido ni hace lo que necesito(este primer if creo que esta bien..lo que me faltaría es el else que es donde me he quedado encallado...el else supuestamente debería de leer de nuevo el array para buscar un campo que no este vacío pero...¿como lo hago? es lo que no se):

PHP:
if (!empty($numero)) {
		$numero = rand(0, 9);
    echo "$frases[$numero]";
}

El código completo que tengo hasta ahora es este (a falta del else que no se que narices debería e meter ahí para que vuelva a leer el array en busca de datos), como podréis comprobar es bastante básico y probablemente no este todo lo bien optimizado que pudiera estar..pero programación suelo hacer mas bien poca (de ahí que me haya quedado atascado)

PHP:
<?php
	if(of_get_option('eslogan1_text') !='') {
	$frase1 = of_get_option('eslogan1_text');
	}
	if(of_get_option('eslogan2_text') !='') {
	$frase2 = of_get_option('eslogan2_text');
	}
	if(of_get_option('eslogan3_text') !='') {
	$frase3 = of_get_option('eslogan3_text');
	}
	if(of_get_option('eslogan4_text') !='') {
	$frase4 = of_get_option('eslogan4_text');
	}
	if(of_get_option('eslogan5_text') !='') {
	$frase5 = of_get_option('eslogan5_text');
	}
	if(of_get_option('eslogan6_text') !='') {
	$frase6 = of_get_option('eslogan6_text');
	}
	if(of_get_option('eslogan7_text') !='') {
	$frase7 = of_get_option('eslogan7_text');
	}
	if(of_get_option('eslogan8_text') !='') {
	$frase8 = of_get_option('eslogan8_text');
	}
	if(of_get_option('eslogan9_text') !='') {
	$frase9 = of_get_option('eslogan9_text');
	}
	if(of_get_option('eslogan10_text') !='') {
	$frase10 = of_get_option('eslogan10_text');
	}
	$frases = array( 
	
	0 => $frase1,
	1 => $frase2,
	2 => $frase3,
	3 => $frase4,
	4 => $frase5,
	5 => $frase6,
	6 => $frase7,
	7 => $frase8,
	8 => $frase9,
	9 => $frase10	
	);
	
	
	if (!empty($numero)) {
		$numero = rand(0, 9);
    echo "$frases[$numero]";
}
else {
	
	}
         

?>

Gracias por adelantado
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Te estás haciendo mucho lio para ese codigo...

una opción entre otras muchas, que tal vez no la mejor sería:

PHP:
<?php
$frases = array();

for( $i = 0; $i < 10; ++$i ) {

   if( ( $frase = of_get_option( 'eslogan'. $i .'_text' ) ) !== false )
       $frases[] = $frase;

}

echo $frases[array_rand( $frases )];
?>
 
Mensajes
213
Puntuación de reacción
0
Muchisimas gracias funciona perfecto!!
Te debo ya no se cuantas cervezas después de la mano que me has echado ya con esta dichosa web ;)
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Muchisimas gracias funciona perfecto!!
Te debo ya no se cuantas cervezas después de la mano que me has echado ya con esta dichosa web ;)

Jaja nada para eso estamos :), recuerda ahora que me fijo cambiar el loop for o cambiar el 'index' de las opciones, sino como está haría un check inútil en cero y no llegaría al 10
 
Mensajes
213
Puntuación de reacción
0
Jaja nada para eso estamos :), recuerda ahora que me fijo cambiar el loop for o cambiar el 'index' de las opciones, sino como está haría un check inútil en cero y no llegaría al 10

me imagino que lo que dices es que debo de cambiar for( $i = 0; $i < 10; ++$i ) por for( $i = 1; $i < 10; ++$i ) no?
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
me imagino que lo que dices es que debo de cambiar for( $i = 0; $i < 10; ++$i ) por for( $i = 1; $i < 10; ++$i ) no?
No, sino seguirá contando hasta nueve aunque desde 1, si quieres modificar el for sería así
PHP:
for( $i = 1; $i < 11; ++$i )

Aunque lo mejor es siempre contar todo desde cero y evitar problemas, es decir renombrando las opciones desde cero
 
Mensajes
213
Puntuación de reacción
0
No, sino seguirá contando hasta nueve aunque desde 1, si quieres modificar el for sería así
PHP:
for( $i = 1; $i < 11; ++$i )

Aunque lo mejor es siempre contar todo desde cero y evitar problemas, es decir renombrando las opciones desde cero

Okis entonces haré como dices y renombraré las opciones para que empiecen desde 0
Nuevamente gracias!! ;)
 
Estado
No está abierto para más respuestas.
Arriba