Foros del Web » Programando para Internet » PHP »

global foreach

Estas en el tema de global foreach en el foro de PHP en Foros del Web. Tengo esto Código PHP: foreach ( $categories -> categories  as  $categories )             {                 global  $categories ;                  $categories  =  $categories -> category ;             }  Necesito usar ...
  #1 (permalink)  
Antiguo 02/09/2011, 15:14
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 15 años, 6 meses
Puntos: 20
global foreach

Tengo esto
Código PHP:
foreach ($categories->categories as $categories)
            {
                global 
$categories;
                
$categories $categories->category;
            } 
Necesito usar $categories fuera del foreach y he probado definir $categories como global antes y despues del $categories = $categories->category; pero al ponerlo antes no trae nada y al ponerlo despues solo devuelve el primer valor.

Que soluciones hay para esto?

Gracias,
Alex
  #2 (permalink)  
Antiguo 02/09/2011, 15:18
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: global foreach

el foreach no necesitas hacerlo global, ya que eso es dentro del ambito de funciones, si das mas detalles de lo que tienes se te podria ayudar mejor ya que con solo eso es un poco dificil
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 02/09/2011, 15:22
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 15 años, 6 meses
Puntos: 20
Respuesta: global foreach

La funccion que tiene el foreach

Código PHP:

function getCategories()
        {
            
$categories TheApi::GetCategoriesList();
            
#echo "<pre>";
            #print_r($categories);
            #echo "</pre>";
            
            
foreach ($categories->categories as $categories)
            {
                
                
//global $categories; -> asi no devuelve nada
            
                
$categories $categories->category;
            
                
//global $categories; -> asi me devuelvo solo el primer valor//
                // y si no pongo nada no trae nada

            
}
            
            echo 
$categories; ->
            
            
/*$categories = $categories." ";
            $categoriesArray = preg_split('/ /', $categories, -1, PREG_SPLIT_NO_EMPTY);
            echo "<pre>";
            print_r($categoriesArray);
            echo "</pre>";*/
            
        

  #4 (permalink)  
Antiguo 02/09/2011, 15:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: global foreach

La pregunta sería para que, pero puedes usar una variable de control, aunque no veo el caso:
Código PHP:
Ver original
  1. $myvar = null;
  2. foreach ($array as $value) {
  3.         $myvar = $value;
  4. }
  5.  
  6. echo $myvar;

Toma en cuenta que eso solo va a darte el último valor, ya que hasta que se complete el foreach() va a brincar a esa parte del echo, es lo mismo que si hicieras (y mas óptimo):
Código PHP:
Ver original
  1. $myvar = $array[count($array)-1];

Saludos.
  #5 (permalink)  
Antiguo 02/09/2011, 15:30
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: global foreach

puedes usar otros nombres de variables , si lo que quieres es imprimir lo que te trae GetCategoriesList imprimelo dentro del foreach directamente, porque lo que estas haciendo es recorrer el arreglo que este te trae y sobreescribiendo una variable, ahora si lo que deseas es que te devuelva todas las categorias deberías de hacerlo en el formato de array y luego trabajar sobre este en la parte de tu codigo saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #6 (permalink)  
Antiguo 02/09/2011, 15:41
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 15 años, 6 meses
Puntos: 20
Respuesta: global foreach

Vale voy a explicar un poco mas...

Queria usar la variable fuera del for each por las siguientes razones:
  1. $categories = TheApi::GetCategoriesList(); trae resultados en un json_decode
  2. Le hago el foreach para librarme de un array multidimensional de 3 nivles (Categories->Category->Cat1,Cat2,Cat3...)
  3. Al hacerle el foreach el resultado de $categories = $categories->category; se me queda asi: cat1cat2cat3cat4... y no se porque razon al hacerle esto

Código PHP:
foreach ($categories->categories as $categories)
            {
                
//global $categories;
                
$categories $categories->category;
                
$categories $categories." ";
                
$categoriesArray preg_split('/ /'$categories, -1PREG_SPLIT_NO_EMPTY);
                echo 
"<pre>";
                
print_r($categoriesArray);
                echo 
"</pre>";
            } 
Me devuelve esto
Código:
Array
(
    [0] => cat1
)

Array
(
    [0] => cat2
)

Array
(
    [0] => cat3
)

Array
(
    [0] => cat4
)

Array
(
    [0] => cat5
)
....
Bueno yo supongo que sera eso por el foreach. Y por esa razon queria usar $categories fuera del foreach y asi ver si eso no iba a pasar.
  #7 (permalink)  
Antiguo 02/09/2011, 15:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: global foreach

Lo hace porque ese preg_split, es como un explode por espacios, por eso te genera un array.

Saludos.
  #8 (permalink)  
Antiguo 02/09/2011, 15:51
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 15 años, 6 meses
Puntos: 20
Respuesta: global foreach

Si si, y es por eso porque lo uso (ese o explode) pero es que no quiero tener un array para categoria si no que un array con las categorias para luego hacer otro foreach y llamar para cada categoria X articulos
  #9 (permalink)  
Antiguo 02/09/2011, 15:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: global foreach

Pues simple, crea el array fuera:
Código PHP:
Ver original
  1. $var = array();
  2. foreach ($array as $value) {
  3.       // Cosas
  4.       $var[] = $datoquequierasguardar;
  5. }
  6.  
  7. var_dump($var);

Saludos.
  #10 (permalink)  
Antiguo 02/09/2011, 16:11
 
Fecha de Ingreso: junio-2009
Ubicación: Madrid
Mensajes: 402
Antigüedad: 15 años, 6 meses
Puntos: 20
Respuesta: global foreach

Ooo gran sabio GatorV te doy las gracias (algun sacrificio tambien ? xD ). Gracias GatorV, como siempre... tu solucion es tan ovia para ti y tan misteriosa para mi u otros. Como en USA dice: You're my role model... jiji

Gracias carlos_belisario por tu aporte y tu interes, gracias.

Gracias a los dos.

Etiquetas: foreach, global
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 06:45.