Foros del Web » Programando para Internet » PHP »

Pasando string a array multidimensional

Estas en el tema de Pasando string a array multidimensional en el foro de PHP en Foros del Web. Código PHP: //Dado un string del tipo:  $stringProductos  =  "3,7;27,2;1,4;12,10;" ; //Quiero que acabe metido en un array de esta forma: $array  = array(      array( 3 => 7 ),      array( 27 => 2 ),      array( 1 => 4 ), ...
  #1 (permalink)  
Antiguo 21/10/2011, 15:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 2
Antigüedad: 8 años, 8 meses
Puntos: 1
Pregunta Pasando string a array multidimensional

Código PHP:

//Dado un string del tipo: 

$stringProductos "3,7;27,2;1,4;12,10;";

//Quiero que acabe metido en un array de esta forma:

$array = array(
     array(
3=>7),
     array(
27=>2),
     array(
1=>4),
     array(
12=>10)
)

//Para ello he intentado:


$lines explode(";"$stringProductos); 

$array = array(); 

foreach ( 
$lines as $line ){  
     
$values explode(','$line);
     
$array[$values[0]] = array($values[0] , $values[1]);

print_r($array); 
Y he conseguido el error:

Notice: Undefined offset: 1 in C:\xampp\htdocs\Dropbox\proyectoJaviOscar\htdocs\U ntitled-1.php on line 38

Y esto:

Array ( [3] => Array ( [0] => 3 [1] => 7 ) [27] => Array ( [0] => 27 [1] => 2 ) [1] => Array ( [0] => 1 [1] => 4 ) [12] => Array ( [0] => 12 [1] => 10 ) [5] => Array ( [0] => 5 [1] => 2 ) [6] => Array ( [0] => 6 [1] => 1 ) [9] => Array ( [0] => 9 [1] => 1 ) [26] => Array ( [0] => 26 [1] => 1 ) [29] => Array ( [0] => 29 [1] => 1 ) [31] => Array ( [0] => 31 [1] => 1 ) [] => Array ( [0] => [1] => ) )

Que creeis que debo de cambiar???? Graciass de antemano!!!
  #2 (permalink)  
Antiguo 21/10/2011, 16:15
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 12 años, 7 meses
Puntos: 51
Respuesta: Pasando string a array multidimensional

Utilizo esta class para ese tipo de cosas

Código PHP:
<?php

class VAL{
    const 
API 1.0;
    const 
VER 1.0;
    const 
SISTEM "CFX-V2";
    public static 
$param = array();
    public static function 
parser($param$equality="="$delimiter="|"$escape="\\"){
        if( 
is_array($param) ) return $param;
        if(
substr($param,-1,1) == $delimiter)$param substr($param0, -1);
        
$d='[d:'.ord($delimiter).']';
        
$param=str_replace($escape.$delimiter,$d,$param);
        
$param=explode($delimiter,$param);
        
$ar=array();
        foreach(
$param as $r){
            
$rstr_replace($d,$delimiter,$r);
            
$rexplode($equality,$r,2);
            if(
count($r)==2){
                
$r[0]=preg_replace('/\n+/'""trim($r[0])); 
                
$r[1]=self::parser($r[1], $equality$delimiter$escape);
                
$ar[$r[0]]=$r[1];
            }else return 
implode($delimiter,$param);
        }
        return 
$ar;
    }
    public static function 
implode($param$equality="="$delimiter="|"$escape="\\"){
        if( !
is_array($param) ) return $param;
        
$str '';
        foreach(
$param as  $key => $val){
            
$c=true;
            if(
is_array($val))$val=self::implode($val$equality$delimiter$escape);
            
$val str_replace$delimiter$escape.$delimiter$val);
            
$str .=$key $equality $val $delimiter;
        }
        if(
$c)$str substr($str,0,-1);
        return 
$str;
    }
    public static function 
extend($default$param$parser=false){
        if( 
$parser$param self::parser$param );
        if( !
is_array($default)) return $default;
        foreach(
$default as $key => $val ){
            if( isset(
$param[$key]) ) $default[$key] = is_array$default[$key] )? self::extend$default[$key],$param[$key],$parser ) : $param[$key] ;
        }
        return 
$default;
    }
    
    public static function 
set($ruta$value$param=NULL){
        
$n=explode('/',$ruta);
        
is_array($param)?$t=&$param $t=&self::$param;
        for(
$i 0$i count($n); $i++){
            (
$n[$i] == '')?$t=&$t[]:$t=&$t[$n[$i]];
        }
        
$t=$value;
        return 
self::$param;    
    }
    public static function 
get($ruta$param=NULL){
        
$n=explode('/',$ruta);
        
$t=is_array($param)?$param:self::$param;
        for(
$i 0$i count($n); $i++){
            
$t=$t[$n[$i]];
        }
        return 
$t;
    }
}

?>
Código PHP:

$stringProductos 
"3,7;27,2;1,4;12,10;"
$stringProductos VAL::parser($stringProductos,',',';');

print_r($stringProductos);
$stringProductos VAL::implode($stringProductos,',',';');
print_r($stringProductos); 
en tu caso

Código PHP:
$stringProductos "3,7;27,2;1,4;12,10;"
$stringProductos VAL::parser($stringProductos,',',';');

print_r($stringProductos); 
$newArray=array();
foreach(
$stringProductos as $key => $val){
    
$newArray[]=array($key => $val);
}
print_r($newArray); 
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft

Última edición por Lynxcraft; 21/10/2011 a las 16:24
  #3 (permalink)  
Antiguo 21/10/2011, 16:47
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 9 años
Puntos: 793
Respuesta: Pasando string a array multidimensional

Bueno el problema que tienes es por el punto y coma del final que hace que se cree un array vacío:

Código PHP:
Ver original
  1. <?php
  2. $stringProductos = "3,7;27,2;1,4;12,10;";
  3.  
  4. //Quitamos los punto y coma que sobran
  5. $stringProductos = trim($stringProductos, ';');
  6.  
  7. $lines = explode(";", $stringProductos);  
  8.  
  9. $array = array();  
  10.  
  11. foreach ( $lines as $line ){  
  12.      $values = explode(',', $line);
  13.      //Aquí maneja la clave como lo tienes o como yo lo tengo
  14.      $array[] = array($values[0] => $values[1]);
  15. }  
  16.  
  17. echo '<pre>';
  18. print_r($array);  
  19. echo '</pre>';

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #4 (permalink)  
Antiguo 22/10/2011, 17:01
 
Fecha de Ingreso: octubre-2011
Mensajes: 2
Antigüedad: 8 años, 8 meses
Puntos: 1
Respuesta: Pasando string a array multidimensional

muxas gracias Andres, funciona de lujo!!! no sabes d la k me has sacao

Etiquetas: multidimensional, pasando, string
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:31.