2009-07-02 89 views
0

說這是我的字符串如何使用字符串從多維數組中獲取值?

$string = 'product[0][1][0]'; 

我怎麼能使用該字符串單獨真正得到從數組值,好像我用了這一點:

echo $array['product'][0][1][0] 

我已經與preg_match_all好惹的與此正則表達式(/\[([0-9]+)\]/),但我無法想出令人滿意的東西。

任何想法?提前致謝。

回答

4

您可以使用preg_split來獲取單個數組索引,然後循環逐個應用這些索引。這裏有一個例子,它使用粗糙的/[][]+/正則表達式將字符串分開,無論它找到一個或多個方括號。

(閱讀[][]結構爲[\]\[],即匹配左右括號字符類。反斜線是可選的。)

function getvalue($array, $string) 
{ 
    $indices = preg_split('/[][]+/', $string, -1, PREG_SPLIT_NO_EMPTY); 

    foreach ($indices as $index) 
     $array = $array[$index]; 

    return $array; 
} 
0

這是prettttty哈克,但這會工作。不知道你的數組結構會發生怎樣的變化,如果變得太動態,這將不起作用。

$array = array(); 

$array['product'][0][1][0] = "lol"; 

$string = 'product[0][1][0]'; 

$firstBrace = strpos($string, "["); 

$arrayExp = substr($string, $firstBrace); 
$key = substr($string, 0, $firstBrace); 

echo $arrayExp, "<br>"; 
echo $key, "<br>"; 

$exec = "\$val = \$array['".$key."']".$arrayExp.";"; 

eval($exec); 

echo $val; 
0

怎麼樣使用eval()

<?php 
    $product[0][1][0] = "test"; 
    eval ("\$string = \$product[0][1][0];"); 
    echo $string . "\n"; 
    die(); 
?> 
相關問題