PHP - lookup-array-Inhalte mit dot-syntax
Tut niemanden sehen, nichts falsch mit der folgenden Funktion? (Bearbeiten: Nein, ich glaube nicht, dass etwas falsch ist, ich bin einfach zu überprüfen, da diese eingebaut werden soll, eine sehr häufige code-Pfad).
function getNestedVar(&$context, $name) {
if (strstr($name, '.') === FALSE) {
return $context[$name];
} else {
$pieces = explode('.', $name, 2);
return getNestedVar($context[$pieces[0]], $pieces[1]);
}
}
Diese wird im wesentlichen konvertieren:
$data, "fruits.orange.quantity"
in:
$data['fruits']['orange']['quantity']
Kontext, das ist für ein Formular-Dienstprogramm Baue ich in Smarty. Ich brauche den Namen für das Formular auch so, ich muss die Zeichenfolge in einem Schlüssel-Formular, und kann nicht direkt auf die Smarty-variable in Smarty.
- Nein. soll da etwas falsch mit, dass-Funktion?
- Nein, siehe edit oben. Ich bin nur nicht sicher, ob ich etwas fehlt ganz offensichtlich entweder, warum dies nicht zu tun, so wie ich bin, oder dann, wenn es einen viel einfacheren Weg, es zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, einen iterativen Ansatz:
Werfen Sie einen Blick auf diese: https://gist.github.com/elfet/4713488
Und diese Klasse auch PHPUnit tests.
Wie tief wird diese Verschachtelung werden? PHP hat eine Beschränkung der Rekursion, scheint zu sein, ca. 2^16. Gerade getestet, und bei Rekursionstiefe 65420 PHP (5.2.9) leise ausgefallen ist (kein Fehler).
In seiner derzeitigen form keine Fehler/Warnungen werden angezeigt, wenn ein oder mehrere Elemente nicht vorhanden sind
(getestet mit php 5.3.1/win32).
Aus irgendeinem Grund Zugriff auf ein nicht vorhandenes element in
getNestedVar($context[$pieces[0]]...
keinen Anlass zu einer Warnmeldung, die macht es wirklich schwer zu Debuggen und zu finden, z.B. ein Tippfehler.Ich nicht sehen, nichts falsch mit, dass-code. Ich habe es getestet als gut.
Nicht, dass die Antwort auf Ihre Frage?
Edit: Das ist IMHO etwas schöner. Es spielt keine Rekursion, und gibt null zurück, wenn ein Kind von einem nicht-array zugegriffen wird.
Cheers
Warum Sie nicht einfach machen Verwendung von html..
name="fruit[orange]"
ist genug.. um ein array.Haben Sie einen Blick @ http://github.com/projectmeta/Stingray
Ermöglicht das Lesen und schreiben in ein array über die Punkt-notation/syntax.
Beispiel: http://github.com/projectmeta/Stingray#example-usage