valor - heredoc php
Convertir una cadena en variable (8)
Encontré esto en la página Variables variables :
function VariableArray($data, $string) {
preg_match_all(''//[([^/]]*)/]/'', $string, $arr_matches, PREG_PATTERN_ORDER);
$return = $arr;
foreach($arr_matches[1] as $dimension) { $return = $return[$dimension]; }
return $return;
}
Tengo una matriz asociativa multidimensional que incluye elementos como
$data["status"]
$data["response"]["url"]
$data["entry"]["0"]["text"]
Tengo algunos hilos como:
$string = ''data["status"]'';
$string = ''data["response"]["url"]'';
$string = ''data["entry"]["0"]["text"]'';
¿Cómo puedo convertir las cadenas en una variable para acceder al elemento de matriz adecuado? Este método deberá funcionar en cualquier matriz en cualquiera de las dimensiones.
Las variables variables de PHP te ayudarán aquí. Puede usarlos prefijando la variable con otro signo de dólar:
$foo = "Hello, world!";
$bar = "foo";
echo $$bar; // outputs "Hello, world!"
Rápido y sucio:
echo eval(''return $''. $string . '';'');
Por supuesto, la cadena de entrada debería ser desinfectada primero.
Si no te gusta lo rápido y lo sucio ... entonces esto también funcionará y no requiere evaluación, lo que incluso me avergüenza.
Sin embargo, hace suposiciones sobre el formato de cadena:
<?php
$data[''response''] = array(
''url'' => ''http://www.testing.com''
);
function extract_data($string) {
global $data;
$found_matches = preg_match_all(''//[/"([a-z]+)/"/]/'', $string, $matches);
if (!$found_matches) {
return null;
}
$current_data = $data;
foreach ($matches[1] as $name) {
if (key_exists($name, $current_data)) {
$current_data = $current_data[$name];
} else {
return null;
}
}
return $current_data;
}
echo extract_data(''data["response"]["url"]'');
?>
Yo estaba luchando con eso también, tuve esto:
$user = array(''a''=>''alber'', ''b''=>''brad''...);
$array_name = ''user'';
y me preguntaba cómo entrar en Albert.
al principio lo intenté
$value_for_a = $$array_name[''a'']; // this dosen''t work
entonces
eval(''return $''.$array_name[''a''].'';''); // this dosen''t work, maybe the hoster block eval which is very common
entonces finalmente probé la estupidez:
$array_temp=$$array_name;
$value_for_a = $array_temp[''a''];
y esto funcionó perfecto! sabiduría, hazlo simple, hazlo estúpido.
Espero que esto responda tu pregunta
Esto se puede hacer de una manera mucho más simple. Todo lo que tienes que hacer es pensar en qué función proporciona PHP que crea variables.
$string = ''myvariable'';
extract(array($string => $string));
echo $myvariable;
¡hecho!
Tendrás acceso a ellos como:
print $$string;
Puede pasar por referencia con el operador &
. Entonces en tu ejemplo tendrás algo como esto
$string = &$data["status"];
$string = &$data["response"]["url"];
$string = &$data["entry"]["0"]["text"];
De lo contrario, necesitas hacer algo como esto:
$titular = array();
for ($r = 1; $r < $rooms + 1; $r ++)
{
$title = "titular_title_$r";
$firstName = "titular_firstName_$r";
$lastName = "titular_lastName_$r";
$phone = "titular_phone_$r";
$email = "titular_email_$r";
$bedType = "bedType_$r";
$smoker = "smoker_$r";
$titular[] = array(
"title" => $$title,
"first_name" => $$firstName,
"last_name" => $$lastName,
"phone" => $$phone,
"email" => $$email,
"bedType" => $$bedType,
"smoker" => $$smoker
);
}
Hay una función PHP nativa para esto: use http://php.net/manual/ru/function.parse-str.php (parse_str ()).
no te olvides de limpiar la cadena de '''' '''' antes de analizar.