Erstellen einer Instanz eines PHP-Schlüsselwertpaares ohne Array
-
22-09-2019 - |
Frage
Ich schreibe eine rekursive Funktion, um ein mehrdimensionales Array zu konstruieren. Grundsätzlich ist das Problem wie folgt:
function build($term){
$children = array();
foreach ( $term->children() as $child ) {
$children[] = build($child);
}
if(!count($children)){
return $term->text();
} else {
return $term->text() => $children; //obviously, this doesn't work
}
}
Gedanken? Ich weiß, dass ich die Struktur der Funktion umschreiben könnte, damit sie funktioniert, aber es scheint, als ob das unnötig sein sollte.
Lösung
Ein Array ist das einzige Schlüsselwertpaar-Container-Container, der PHP bietet. Sie müssen also ein Array verwenden, wenn Sie Ihre Funktion möchten (möglicherweise rekursiv oder nicht), um ein Schlüsselwertpaar zurückzugeben.
return array($term->text() => $children);
Andere Tipps
function build($term){
$children = array();
foreach ( $term->children() as $child ) {
$children += build($child);
}
if(!count($children)){
return $term->text();
} else {
return array($term->text() => $children); //obviously, this doesn't work
}
}
Soweit ich die Frage verstehe, sollte es so aussehen.
Anhängen der Rekursion und Rückgabe eines Arrays.
Bearbeiten: Abgesehen davon sind Sie möglicherweise besser dran, ein Array zurückzugeben, selbst wenn Count ($ children) == 0, dies würde alle Ihre Typen inline erhalten. Andernfalls können Sie alle möglichen Fehler auf der ganzen Linie erhalten:
if(!count($children)){
return array($term->text() => null);
Sie könnten es so zurückgeben:
return array($term->text() => $children);
Obwohl es nicht das ist, was Sie gefragt haben. Ich denke, Sie können dies nicht tun, ohne Teile Ihrer Funktion auf die eine oder andere Weise neu zu schreiben.