Foros del Web » Programando para Internet » PHP »

Devolver ARRAY desde una fumcion

Estas en el tema de Devolver ARRAY desde una fumcion en el foro de PHP en Foros del Web. Hola buenas! Tengo una funcion que crea un array he intentado lo siguiente: Código PHP: <?php FUNCTION  all_stats  ( $user , $is_data_opened ) {     IF ( ...
  #1 (permalink)  
Antiguo 30/08/2004, 09:47
 
Fecha de Ingreso: agosto-2004
Mensajes: 7
Antigüedad: 19 años, 7 meses
Puntos: 0
Devolver ARRAY desde una fumcion

Hola buenas! Tengo una funcion que crea un array he intentado lo siguiente:

Código PHP:
<?php
FUNCTION all_stats ($user,$is_data_opened)
{
    IF (
$is_data_opened == FALSE)
    {
        
$html file('http://hiscore.runescape.com:80/aff/runescape/hiscorepersonal.cgi?username='.$user);
    }
    
// Comprobamos que el usuario aparece en las tablas
    
$pos strpos($html[4], "does not currently appear in the hiscores");
    IF (
$pos === FALSE)
    {
        
$allstats = array();
        
//Lo primero que hacemos es inicializar el array the habilidades.
        
$categories[0]="Overall";
        
$categories[1]="Attack";
        
$categories[2]="Defence";
        
$categories[3]="Strength";
        
$categories[4]="Hitpoints";
        
$categories[5]="Ranged";
        
$categories[6]="Prayer";
        
$categories[7]="Magic";
        
$categories[8]="Cooking";
        
$categories[9]="Woodcutting";
        
$categories[10]="Fletching";
        
$categories[11]="Fishing";
        
$categories[12]="Firemaking";
        
$categories[13]="Crafting";
        
$categories[14]="Smithing";
        
$categories[15]="Mining";
        
$categories[16]="Herblore";
        
$categories[17]="Agility";
        
$categories[18]="Thieving";
        
$categories[19]="Runecrafting";
        
$l=0;
        For (
$i=0;$i<=19;$i++)
        {
            
$position 8+7*$i;
            
$stats[$i] = $html[$position];
        
            
//Buscamos si es entero, en tal caso buscamos a que habilidad pertenece el entero.
            
IF (strpos($stats[$i], "table cellspacing")===FALSE)
            {
                
$position $position-2;
                DO
                {    
                    IF (
strpos($html[$position], $categories[$l])!==FALSE)
                    {
                        
$allstats[$categories[$l]] = $stats[$i];
                        echo 
"allstats[".$categories[$l]."] = ".$stats[$i].";<br>";
                        
$valido TRUE;                    
                    }
                    ELSE
                    {
                        
$allstats[$categories[$l]] = "-";
                    }
                    
$l=$l+1;
                }
                WHILE(
$valido==FALSE);
                
$valido FALSE;       
            }
            ELSE
            {
                
$i=19;
            }
        }
        
//Mostramos las habilidades que queden con 1 guion
        
FOR ($i=$l;$i<=19;$i++)
        {
            
$allstats[$categories[$i]] .= "-";
        }
    }
    
print_r(array_keys($allstats));
    return 
$allstats;
}
//fin funcion all_stats

all_stats(jcgx,FALSE);
print_r(array_keys($allstats));

IF (
$allstats==ARRAY())
{
    echo 
"ERROR: The user does not appear in the high score tables. Be sure it is spelled correctly.";
}
ELSE
{
    echo 
$allstats[Overall];
}
?>
El caso es que si ejecuto print_r(array_keys($allstats)); dentro de la funcion, imprime su estructura correctamente (los valores tb se introducen bien), pero sin embargo, actua como si no existiera el array si ejecuto ese comando desde fuera. He pasado $allstats con un return y parece no haber funcionado. Que es lo que esta mal? Gracias por adelantado

Última edición por darth_maul68; 30/08/2004 a las 09:53
  #2 (permalink)  
Antiguo 30/08/2004, 11:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Deberías usar is_array() para comprobar si una variable es un array o no (en lugar del "texto" que dice si es un array y no se accede a ningún elemento concreto).

Por lo demás .. que no te funcione el código que pusistes se debe al "ambito" (scope) de las variables, .. todo lo que defines en una función queda ahí salvo que uses "global" para definirlo como global .. Ya que usas un "return" .. la llamada a tu función ha de ser asignada a una variable (de mismo nombre u otro . .) ejemplo:

Código PHP:
$allstats=all_stats(jcgx,FALSE); 
print_r(array_keys($allstats)); 

IF (
is_array($allstats)) 

    echo 
"ERROR: The user does not appear in the high score tables. Be sure it is spelled correctly."

ELSE 

    echo 
$allstats[Overall]; 

Un saludo,
  #3 (permalink)  
Antiguo 30/08/2004, 12:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 7
Antigüedad: 19 años, 7 meses
Puntos: 0
Perfecto, Muchas gracias
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 22:14.