PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

04-05-2008, 03:45
|
Screw Driver
Newbie
|
|
Registriert seit: Aug 2003
Ort: Bremerhafen
Beiträge: 142
|
|
[PHP5] Leere Einträge aus Array entfernen
Hallo,
ich habe einen verschachtelten Array mit dem Name $structure. Manchmal hat ein Eintrag Kinder, manchmal nicht.
Mein Array $structure sieht so aus:
PHP-Code:
Array
(
[52] => Array
(
[id] => 52
[name] => Tier
[level] => 0
[children] => Array
(
[22] => Array
(
[id] => 22
[name] => Katze
[level] => 1
[children] => Array
(
)
)
[26] => Array
(
[id] => 26
[name] => Maus
[level] => 1
[children] => Array
(
)
)
)
)
)
Ich hatte gehofft mit dieser Funktion die leeren "children" entfernen zu können aber es klappt nicht.
PHP-Code:
function rekursiv( $array )
{
foreach( $array as $key => $value )
{
if( is_array($value) )
{
if( !empty( $value['children'] ) )
{
rekursiv( $value['children'] );
}
else
{
unset($value['children']);
$temp[] = $value;
}
}
}
return $temp;
}
$ausgabe = rekursiv( $structure );
echo '<pre>'; print_r($ausgabe); echo '</pre><hr/>';
Weiß jemand wo der Fehler ist?
__________________
Gruß,
Peter
Geändert von Screw Driver (04-05-2008 um 03:51 Uhr)
|

04-05-2008, 13:21
|
tontechniker
PHP Senior
|
|
Registriert seit: Jul 2005
Beiträge: 1.972
|
|
|

04-05-2008, 13:54
|
Screw Driver
Newbie
|
|
Registriert seit: Aug 2003
Ort: Bremerhafen
Beiträge: 142
|
|
Es kommt gar nichts raus und es wird gesagt, dass $temp nicht existiert.
Code:
Undefined variable: temp in D:\XAMPP\htdocs\mysystem\class\class.container.php on line 661
Line 661 ist die Zeile in der return $temp; steht.
__________________
Gruß,
Peter
|

04-05-2008, 14:01
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Wenn PHP das sagt stimmt das auch!
Übrigens:
So wie du da mit unset was löschen willst, bringt das nicht viel, weil foreach mit einer Kopie des Arrays arbeitet.
|

04-05-2008, 14:06
|
Screw Driver
Newbie
|
|
Registriert seit: Aug 2003
Ort: Bremerhafen
Beiträge: 142
|
|
Aber was kann ich denn tun, wo steckt das Problem bei der Funktion? Ich komme einfach nicht weiter.
__________________
Gruß,
Peter
|

04-05-2008, 15:13
|
Seggl-hoch-drei
Registrierter Benutzer
|
|
Registriert seit: Sep 2007
Beiträge: 312
|
|
Stell $value ein & voran! also &$value (in deinem foreach)
|

04-05-2008, 15:16
|
Screw Driver
Newbie
|
|
Registriert seit: Aug 2003
Ort: Bremerhafen
Beiträge: 142
|
|
Hammer!!!
Klappt, 1000 Dank.
__________________
Gruß,
Peter
|

04-05-2008, 15:20
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 3.296
|
|
Ich sehe nicht ein, warum ['children'] entfernt werden soll!
Das denormalisiert die Struktur doch nur...
|

04-05-2008, 15:25
|
Screw Driver
Newbie
|
|
Registriert seit: Aug 2003
Ort: Bremerhafen
Beiträge: 142
|
|
Ich will daraus einen aufklappbaren Baum generieren, der an verschiedenen Stellen offen sein kann.
Wenn ich "children" entferne, dann weiß ich später, dass dieser Knoten keine Kinder hat.
Die Knoten, die nicht offen sind, werden mit einem unset() anhand der ID entfernt.
So kann ich später bei der Generierung herausfinden, ob ein Knoten überhaupt Kinder hat (children ist vorhanden).
Ob der Knoten ein Plus oder Minus zum auf- und zuklappen bekommt bestimmt sich daraus, ob children leer ist oder gefüllt.
Eine andere Lösung fiel mir nicht ein.
__________________
Gruß,
Peter
|

04-05-2008, 16:02
|
Seggl-hoch-drei
Registrierter Benutzer
|
|
Registriert seit: Sep 2007
Beiträge: 312
|
|
Eine andere Lösung wäre count()
|

04-05-2008, 17:44
|
tontechniker
PHP Senior
|
|
Registriert seit: Jul 2005
Beiträge: 1.972
|
|
Ein einfaches empty würde zur Prüfung reichen.
|

04-05-2008, 19:08
|
3DMax
PHP Senior
|
|
Registriert seit: Jan 2004
Beiträge: 1.916
|
|
Zitat:
Original geschrieben von tontechniker
Ein einfaches empty würde zur Prüfung reichen.
|
man kann auch einfach if(!$var) benutzen, nur wenn es ein array ist, finde ich count() am saubersten.
|

04-05-2008, 19:13
|
Screw Driver
Newbie
|
|
Registriert seit: Aug 2003
Ort: Bremerhafen
Beiträge: 142
|
|
Soweit ich das sehe reicht genau das beides nicht.
Wenn ein Knoten zugeklappt ist, aber Kinder hat kann ich das nicht abfangen. "children" müsste dann vorhanden, aber leer sein.
Ist der Knoten auf, müsste "children" vorhanden und voll sein.
Knoten die gar keine Kinder haben, kann ich dann aber durch beide Bedingungen incht mehr prüfen.
Deshalb habe ich diese Regeln erstellt.
Knoten hat keine Kinder => "children" nicht gesetzt
Knoten zugeklappt, hat Kinder => "children" leer
Knoten offen, hat Kinder => "children" befüllt
__________________
Gruß,
Peter
|

04-05-2008, 19:31
|
Blackgreetz
PHP Junior
|
|
Registriert seit: Oct 2005
Beiträge: 901
|
|
Ich dachte, dass du den Baum erstellst?
Dann setzt du ja auch den "Knotenpunkt"..
..und dann kannst du mit deiner Abfrage empty() (wie du es auch in deiner Funktion tust, nach und nach durchgehen, ob empty true oder false ergibt und wenn ja, dann machst du es zum Knotenpunkt und wenn nicht, lässt du deinen Knotenpunkt weg...
mfg
|

04-05-2008, 19:38
|
Screw Driver
Newbie
|
|
Registriert seit: Aug 2003
Ort: Bremerhafen
Beiträge: 142
|
|
Dadurch weiß man aber nicht welcher Knoten auf ist.
__________________
Gruß,
Peter
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|