php
  • arrays
  • string
  • variables
  • 2009-01-11 78 views 16 likes 
    16

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

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

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

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

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

    回答

    14

    快速和肮脏的:

    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

    -1

    你会访问他们喜欢的:

    print $$string; 
    
    +0

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

    +0

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

    47

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

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

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

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

    $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']; 
    

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

    我希望这回答了你的问题

    5

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

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

    完成!

    0

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

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

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

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

    相关问题