Foros del Web » Programando para Internet » PHP »

Como recorrer array asociativo bidimensional

Estas en el tema de Como recorrer array asociativo bidimensional en el foro de PHP en Foros del Web. Hola: Mo consulta es como puedo recorrer un array bidimensional asociativo: Ej. Código PHP: $f = '' ; $fecha  = array(array( 'anho'  =>  date ( 'Y' ...
  #1 (permalink)  
Antiguo 25/08/2009, 07:55
 
Fecha de Ingreso: abril-2006
Mensajes: 240
Antigüedad: 18 años
Puntos: 1
Como recorrer array asociativo bidimensional

Hola:
Mo consulta es como puedo recorrer un array bidimensional asociativo:
Ej.
Código PHP:
$f='';
$fecha = array(array('anho' => date('Y')),
     
"and" => array('mes' => date('m')),
     
"and" => array('dia' => date('d')));
...
$f 'esto es una prueba de fechas tipo: ';
foreach(
$fecha as $fechas => $fechass){
                    
$f .= $fechass;
        foreach(
$fechass as $fechassIndice=> $fechassValor){
            
$f.= $fechassIndice.' = '.$fechassValor;    
        }
}

return 
$f;
... 
solo me arroja Array y nada mas
La idea es que salga asi: esto es una prueba de fechas tipo: anho = 2009 and mes = 08 and dia = 25
saluda atte.
  #2 (permalink)  
Antiguo 25/08/2009, 08:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Como recorrer array asociativo bidimensional

Estas pisando el mismo indice al usar "and" como indice en tus dos arreglos.

Por otro lado al agregar $f.= $fechass, estas guardando el valor string del array, que en este caso es "Array".

Saludos.
  #3 (permalink)  
Antiguo 25/08/2009, 08:57
 
Fecha de Ingreso: abril-2006
Mensajes: 240
Antigüedad: 18 años
Puntos: 1
Respuesta: Como recorrer array asociativo bidimensional

Entonces, si es asi, como lo puedo generar??,
cambie el "and" por "or" y no tuve problemas, pero necesito el formateo original, osea, tiene que ir con ese indice, segun el argumento pasado, este puede ser and o or, ¿como discriminar al colocar 2 and en este caso?

aca coloco el metdo usado..

Código PHP:
...
public function 
consulta($campos = array(), $tablas = array(), $filtro = array(), $sqll null){
        
$sql "select ";
        if(empty(
$campos)){
            
$sql .= " * ";
        }else{
            foreach(
$campos as $camposs){
                
$sql .= $camposs;
            }
        }
        
        
$sql .= " from ";
        if(!empty(
$tablas)){
            foreach(
$tablas as $tablass){
                
$sql .= $tablass;
            }
        }else{
            return 
"Debes agregar al menos una tabla para la consulta";
        }
        
        if(!empty(
$filtro)){
            
$sql .= " where ";
            if(
count($filtro) == 1){
                foreach(
$filtro as $filtroIndice => $filtroValor){
                    
$sql .= $filtroIndice.' = '.$filtroValor;
                }
            }else{
                foreach(
$filtro as $filtros => $filtross){
                    
$sql .= $filtros;
                    foreach(
$filtross as $filtroIndice => $filtroValor ){
                        
$sql .= $filtroIndice.' = '.$filtroValor;    
                    }
                }
            }
        }
        
        if((
$sqll != null) || (!empty($sqll))){
            
$sql .= $sqll;
        }
        
        
$sql .= $sqll;
        return 
$sql;
    }
....

$fe $this->consulta(array('anho'), $this->setDbbTbl(array('adm.mai')), array(array("anho" => date("Y")),
                            
"and" => array("mes" => date("m")),
                             
"or"  => array("dia" => date("d"))
                            ) 
//OK

$fe $this->consulta(array('anho'), $this->setDbbTbl(array('adm.mai')), array(array("anho" => date("Y")),
                            
"and" => array("mes" => date("m")),
                             
"and"  => array("dia" => date("d"))
                            ) 
//FALLO 
salu2
  #4 (permalink)  
Antiguo 25/08/2009, 09:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Como recorrer array asociativo bidimensional

Lamentablemente no puedes hacerlo jugando con los indices del array, ya que es el comportamiento natural.

Lo que si puedes hacer es tener un array con dos indices donde el indice 0 sea el tipo de union y el indice 1 sea el valor, asi puedes tener tantos ands o ors como quieras.

Saludos.
  #5 (permalink)  
Antiguo 25/08/2009, 09:59
 
Fecha de Ingreso: abril-2006
Mensajes: 240
Antigüedad: 18 años
Puntos: 1
Mi estimado, ahora lo hago de la siguiente manera:
coloco el and dentro del array, y dejo sin tocar los indices.
pero el resulado ahora me da:
anho = 20090 = and mes = 080 = and dia = 25
se me coloca un 0 despues del 2009 0, y tb en mes se coloca un 0 en 08 0
¿como puedo sacar el valor 0?
Código PHP:
...
$f='';

array(array(
"anho" => date("Y")),
        array(
" and ""mes" => date("m")),
        array(
" and ""dia" => date("d")));

...
$f 'esto es una prueba de fechas tipo: ';
foreach(
$fecha as $fechas => $fechass){
                   
//$f .= $fechass;
        
foreach($fechass as $fechassIndice=> $fechassValor){
            
$f.= $fechassIndice.' = '.$fechassValor;    
        }
}

return 
$f;
... 
no me funka

UFF Ahhu funko, no se si es lo ideal, pero sirve
coloque un if para comparar el fitro
aka va
Código PHP:
foreach($filtro as $filtros => $filtross){
                    
//$sql .= $filtros;
                    
foreach($filtross as $filtroIndice => $filtroValor){
                        if(((
strpos(strtolower($filtroValor),'and')) && ($filtroIndice == 0)) || ((strpos(strtolower($filtroValor),'or')) && ($filtroIndice == 0))){
                            
$sql .= $filtroValor;
                        }else{
                            
$sql .= $filtroIndice.' = '.$filtroValor;    
                        }
                    }
                } 

Última edición por GatorV; 25/08/2009 a las 11:35
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 12:41.