2009-07-02 9 views
0

Sagen Sie diesen meinen StringWie kann ich eine Zeichenfolge verwenden, um einen Wert aus einem multidimensionalen Array abzurufen?

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

ist Wie könnte ich diese Zeichenfolge allein verwenden tatsächlich aus einem Array um den Wert zu erhalten, als ob ich diese benutzt hatte:

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

habe ich messed um mit preg_match_all mit dieser Regex (/\[([0-9]+)\]/), aber ich bin nicht in der Lage, etwas zufriedenstellendes zu finden.

Irgendwelche Ideen? Danke im Voraus.

Antwort

4

Sie könnten preg_split verwenden, um die einzelnen Array-Indizes abzurufen, und dann eine Schleife, um diese Indizes nacheinander anzuwenden. Hier ist ein Beispiel, das eine grobe /[][]+/ Regex verwendet, um die Zeichenfolge aufzuteilen, wo immer sie eine oder mehrere eckige Klammern findet.

(Lesen Sie das [][] Konstrukt als [\]\[], das heißt eine Zeichenklasse, die nach rechts oder links in eckigen Klammern übereinstimmt. Die Schrägstriche sind optional.)

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

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

    return $array; 
} 
0

Diese prettttty Hacky ist, aber das wird funktionieren. Ich weiß nicht, wie stark sich Ihre Array-Struktur verändern wird, das wird nicht funktionieren, wenn Sie zu dynamisch werden.

$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

Wie wäre es mit eval()?

<?php 
    $product[0][1][0] = "test"; 
    eval ("\$string = \$product[0][1][0];"); 
    echo $string . "\n"; 
    die(); 
?> 
Verwandte Themen