Foros del Web » Programando para Internet » PHP »

funcion vector aleatorio no funciona online

Estas en el tema de funcion vector aleatorio no funciona online en el foro de PHP en Foros del Web. Hola amigos del foro, tengo la siguiente funcion extrae de un vector una imagen aleatoria ... funciona perfecto localmente pero cuando la subo online en ...
  #1 (permalink)  
Antiguo 23/03/2013, 20:49
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
Pregunta funcion vector aleatorio no funciona online

Hola amigos del foro, tengo la siguiente funcion extrae de un vector una imagen aleatoria ... funciona perfecto localmente pero cuando la subo online en un servidor de alquiler siempre me trae la primera imagen.

funciones.php
Código PHP:
function extraerVectorAleatorio($separador,$vector){
    
$array        explode($separador,$vector);
    
$tamano_array count($array);
    
$clave_array  array_rand($array$tamano_array);
    
    for(
$i=0$i $tamano_array$i++) {
        return 
$array[$clave_array[$i]];
     }            
}
// Funcion que lee las imagenes almacenadas en array y las muestra de forma aleatoria 
ver.php

Código PHP:
<?=extraerVectorAleatorio('|',$tmp_avatar)?>
gracias por la ayuda.
__________________
"La vida sigue su curso, tú toma parte de ella."
  #2 (permalink)  
Antiguo 23/03/2013, 21:46
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: funcion vector aleatorio no funciona online

tu quieres que de un $vector te traiga una imagen aletoria y que no siempre sea la primera???...

lo primero raro que veo en tu funcion es esta linea:
Código PHP:
Ver original
  1. for($i=0; $i < $tamano_array; $i++) {
  2.         return $array[$clave_array[$i]];
  3. }

las funciones terminan cuando llegan al final o cuando llegan a un return por lo que no entiendo que quieres hacer con un return dentro de un for porque este solo retornara 1 vez.
por lo que ese codigo seria equivalente a:

if($tamano_array>=1)
return $array[$clave_array[0]];

........

Ademas los 2 parametros del comando explode deben ser String y si $vector es un array puede que ese sea tu problema.

Otra cosa algunos servidores dan problemas cuando escribes <?= en vez de <?php echo a menos que este configurado en el php.ini
  #3 (permalink)  
Antiguo 23/03/2013, 22:08
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
Pregunta Respuesta: funcion vector aleatorio no funciona online

Rodrhigo gracias por tu respuesta. Hice el cambio en la función

Código PHP:
function extraerVectorAleatorio($separador,$vector){
    
$array        explode($separador,$vector);
    
$tamano_array count($array);
    
$clave_array  array_rand($array$tamano_array);
    
    if(
$tamano_array>=1){
        return 
$array[$clave_array[0]];
    }
}
// Funcion que lee las imagenes almacenadas en array y las muestra de forma aleatoria 
Referente a tu respuesta te confirmo

- La variable $vector es una cadena separada por | ejemplo:

imagen1.jpg|imagen2.jpg|imagen3.jpg

- El servidor acepta <?=?> y <?php echo ?>

Despues de los cambios sigue funcionando local pero no online. Esta raro
__________________
"La vida sigue su curso, tú toma parte de ella."
  #4 (permalink)  
Antiguo 23/03/2013, 22:17
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: funcion vector aleatorio no funciona online

la unica explicacion que encuentro es que tu $vector venga con una sola imagen(imagen1.jpg) creo que seria bueno que imprimas el valor de $tmp_avatar para asegurarte de que viene con mas de una imagen

Ademas podrias usar este codigo que deberia hacer lo mismo.
Código PHP:
Ver original
  1. function extraerVectorAleatorio($separador,$cadena){
  2.     $arreglo        = explode($separador,$cadena);
  3.     $aletorio = rand(0,count($arreglo)-1);
  4.     return $arreglo[$aletorio];
  5.  
  6. }



Otra cosa podrias probar este codigo tambien..... y si te imprime la misma imagen es porque todas las imagenes son iguales :P($tmp_avatar = 'imagen1.jpg|imagen1.jpg|imagen1.jpg')
Código PHP:
Ver original
  1. function extraerVectorAleatorio($separador,$cadena){
  2.     $arreglo        = explode($separador,$cadena);
  3.     return $arreglo[1];//remplazar el 1 por cualquier numero y deberia imprimir una imagen distinta por cada numero.
  4. }

y si el codigo de arriba no imprime nada para indices >=1 es porque hay una sola imagen
( $tmp_avatar= 'imagen1.jpg'; )

Última edición por Rodrhigo; 23/03/2013 a las 22:27 Razón: corregir un error en el codigo
  #5 (permalink)  
Antiguo 23/03/2013, 22:28
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
De acuerdo Respuesta: funcion vector aleatorio no funciona online

Rodrhigo Mil gracias al parecer el servidor no interpreta el array_rand, ya que revice en detalle y la cadena pasa completa ... pero no funciona. Use el codigo que me sugeriste y funciono perfecto. Gracias mi hermano ... si necesitas algo con gusto.

Código PHP:
function extraerVectorAleatorio($separador,$vector){
    
$arreglo        explode($separador,$vector);
    
$aletorio       rand(0,count($arreglo));
    return 
$arreglo[$aletorio];
}
// Funcion que lee las imagenes almacenadas en array y las muestra de forma aleatoria 
Muchas gracias.
__________________
"La vida sigue su curso, tú toma parte de ella."
  #6 (permalink)  
Antiguo 23/03/2013, 22:41
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 13 años, 2 meses
Puntos: 48
Respuesta: funcion vector aleatorio no funciona online

Ojo que habia edite mi comentario y puse count($arreglo)-1 y ese -1 no deberia ir.

eso :P.

Etiquetas: funcion, vector
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:53.