variable valor una texto extraer dentro convertir comillas caracteres cadena php arrays string variables

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 ); }