将字符串转换为可变

问题描述:

我有一个多维关联数组,其中包括像将字符串转换为可变

$data["status"] 
$data["response"]["url"] 
$data["entry"]["0"]["text"] 

的元素我有一个字符串,如:

$string = 'data["status"]'; 
$string = 'data["response"]["url"]'; 
$string = 'data["entry"]["0"]["text"]'; 

我怎么能转换成字符串一个变量来访问正确的数组元素?此方法需要在任何维度上的任何数组上工作。

快速和肮脏的:

echo eval('return $'. $string . ';'); 

当然,输入字符串将需要先消毒。

如果你不喜欢快速和肮脏......那么这也会工作,它并不需要eval这使我甚至畏缩。

它,然而,做出关于字符串格式的假设:

<?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"]'); 
?> 
+0

什么是一个详细的备选方案?推荐一个更好的,更有用的字符串格式呢? – 2011-05-25 11:22:18

+6

因为这不会回答这个问题 – 2011-06-01 00:39:20

你会访问他们喜欢的:

print $$string; 
+0

-1这是行不通的。 – Triptych 2009-01-11 17:57:37

+0

你是对的,它不与数组。如果已经测试过 – MattBelanger 2009-01-11 17:58:34

PHP的variable variables将帮助你在这里。您可以通过与另一美元符号作为变量的前缀使用它们:

$foo = "Hello, world!"; 
$bar = "foo"; 
echo $$bar; // outputs "Hello, world!" 

发现这个Variable 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; 
} 

我与挣扎,以及, 我有这样的:

$user = array('a'=>'alber', 'b'=>'brad'...); 

$array_name = 'user'; 

我想知道如何进入albert。

起初我试过

$value_for_a = $$array_name['a']; // this dosen't work 

然后

eval('return $'.$array_name['a'].';'); // this dosen't work, maybe the hoster block eval which is very common 

然后最后我尝试了愚蠢的事情:

$array_temp=$$array_name; 
$value_for_a = $array_temp['a']; 

,这只是工作完美! 智慧,做到这一点简单做到愚蠢。

我希望这回答了你的问题

这可以通过更简单的方式来完成。你所要做的就是想想PHP提供的创建变量的函数。

$string = 'myvariable'; 
extract(array($string => $string)); 
echo $myvariable; 

完成!

您可以通过运营商&参考。所以,在你的榜样,你就会有这样的事情

$string = &$data["status"]; 
$string = &$data["response"]["url"]; 
$string = &$data["entry"]["0"]["text"]; 

否则,你需要做这样的事情:

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

有本地的PHP函数如下: 使用http://php.net/manual/ru/function.parse-str.php(parse_str()) 。

不要忘记解析之前清理从“'的字符串。