2010-11-24 34 views
5

ahora tengo la cuerda de una matriz, como esto:cadena "matriz" a la matriz verdadera

$str = "array('a'=>1, 'b'=>2)"; 

¿Cómo puedo convertir esta cadena en una matriz real? ¿Hay alguna "manera inteligente" de hacer eso, otra que use explotar()? Porque la matriz de "cadena" podría ser muy complicada en algún momento.

Gracias!

Respuesta

5

No conozco una buena forma de hacer esto (solo el mal eval() que realy should be avoided).

pero: ¿de dónde sacas esa cuerda? ¿es algo que puedes afectar? si es así, usar serialize()/unserialize() sería una forma mucho mejor.

5

Utilice la función "eval" de php.

eval("\$myarray = $str;"); 
+0

Como otros han dicho, ¡cuidado! Eval ejecutará todo (imagine consultas de mysql realizadas por un hacker). A menos que haya creado la cadena (y se haya asegurado de que esté "desinfectada"), no use eval. –

1

Tendría que usar eval().

Una mejor manera de obtener una representación textual de una matriz que no necesita eval() para decodificar es usando json_encode()/json_decode().

1

Si puede confiar en la cadena, use eval. No recuerdo la sintaxis exacta, pero debería funcionar.

$arr = eval($array_string); 

Si la cadena está dada por la entrada del usuario o de otra fuente de confianza, usted debe evitar eval() en todas las circunstancias!

Para almacenar matrices en cadenas, posiblemente debería echar un vistazo a serialize y unserialize.

1

Puede escribir la cadena en un archivo, adjuntar la cadena en una definición de función dentro del archivo y darle al archivo una extensión .php.

Luego incluye el archivo php en su módulo actual y llama a la función que devolverá la matriz.

0

No utilice eval() en cualquier caso acaba de llamar para strtoarray($str, 'keys') matriz con llaves y strtoarray($str) de matriz que no tienen llaves.

function strtoarray($a, $t = ''){ 
    $arr = []; 
    $a = ltrim($a, '['); 
    $a = ltrim($a, 'array('); 
    $a = rtrim($a, ']'); 
    $a = rtrim($a, ')'); 
    $tmpArr = explode(",", $a); 
    foreach ($tmpArr as $v) { 
     if($t == 'keys'){ 
      $tmp = explode("=>", $v); 
      $k = $tmp[0]; $nv = $tmp[1]; 
      $k = trim(trim($k), "'"); 
      $k = trim(trim($k), '"'); 
      $nv = trim(trim($nv), "'"); 
      $nv = trim(trim($nv), '"'); 
      $arr[$k] = $nv; 
     } else { 
      $v = trim(trim($v), "'"); 
      $v = trim(trim($v), '"'); 
      $arr[] = $v; 
     } 
    } 
    return $arr; 
}