php
  • arrays
  • string
  • variables
  • 2009-01-11 83 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()) 。

    不要忘記解析之前清理從「'的字符串。

    相關問題