Convert a String to Variable

后端 未结 9 2110
臣服心动
臣服心动 2020-12-01 05:43

I\'ve got a multidimensional associative array which includes an elements like

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


        
相关标签:
9条回答
  • 2020-12-01 06:07

    There are native PHP function for this: use http://php.net/manual/ru/function.parse-str.php (parse_str()).

    don't forget to clean up the string from '"' before parsing.

    0 讨论(0)
  • 2020-12-01 06:11

    Quick and dirty:

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

    Of course the input string would need to be be sanitized first.

    If you don't like quick and dirty... then this will work too and it doesn't require eval which makes even me cringe.

    It does, however, make assumptions about the string format:

    <?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 讨论(0)
  • 2020-12-01 06:17

    This can be done in a much simpler way. All you have to do is think about what function PHP provides that creates variables.

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

    done!

    0 讨论(0)
  • 2020-12-01 06:20

    You would access them like:

    print $$string;
    
    0 讨论(0)
  • 2020-12-01 06:25

    You can pass by reference with the operator &. So in your example you'll have something like this

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

    Otherwise you need to do something like this:

    $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 讨论(0)
  • 2020-12-01 06:26

    Found this on the Variable variables page:

    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 讨论(0)
提交回复
热议问题