$first = array("a", "b" => array("c", "d" => array("e", "f")), "g", "h" => array("f"));
$second = array("b", "d", "f");
$string = "foobar";
Dato il codice di cui sopra, come posso impostare un valore in $first
gli indici definiti $second
ai contenuti di $string
? Significato, per questo esempio, dovrebbe essere $first["b"]["d"]["f"] = $string;
, ma i contenuti di $second
e $first
possono essere di qualsiasi lunghezza. $second
tuttavia sarà sempre unidimensionale. Ecco quello che avevo provato, che non sembra funzionare come previsto:Come accedere in modo dinamico i valori in un array variabile multidimensionale
$key = "";
$ptr = $first;
for($i = 0; $i < count($second); $i++)
{
$ptr &= $ptr[$second[$i]];
$key = key($ptr);
}
$first[$key] = $string;
Questo farà $first["f"] = $string;
al posto dei corretti indici multidimensionali. Avevo pensato che l'utilizzo di key
avrebbe trovato la posizione all'interno della matrice compresi i livelli che aveva già spostato verso il basso.
Come accedere ai tasti corretti in modo dinamico? Potrei gestirlo se il numero di dimensioni fosse statico.
MODIFICA: Inoltre, mi piacerebbe un modo per farlo che non usi eval
.