Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

denkfehler bei rekursiven aufruf?

Diskussion: denkfehler bei rekursiven aufruf? im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige ich glaub ich hab grad nen denkfehler. ich hab folgende funktion zum filtern von arrays: Code: function filter_array(&$arr) { ...

Antwort
Alt 28.03.09, 20:59   #1 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard denkfehler bei rekursiven aufruf?

Anzeige

ich glaub ich hab grad nen denkfehler.
ich hab folgende funktion zum filtern von arrays:

Code:
  function filter_array(&$arr) {
      foreach ($arr as $key => $value) {
          if (is_array($value)) {
              filter_array($value);
          } else {
              $arr[$key] = htmlspecialchars($value , ENT_QUOTES);
          }
      }
  }

wenn mein array jetzt folgendes ist:

Code:
$data = array("muh","bla<>");
bekomm ich auch die <> sauber mit &gt; umgewandelt zurück.
wenn ich aber dagegen folgedes array habe:

Code:
$data = array(array(array("hallo","coool"),array("muh","bla<>")));
bekomm ich das array mit dem <> zurück und nicht mit &gt; und &lt;
wo ist mein denkfehler?
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 28.03.09, 22:04   #2 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Standard

Naja, es klappt zwar in der xten Rekursionsstufe die Zuweisung des Wertes zum Arrayschlüssel, wenn du die Rekursion dann aber wieder zurückgehst, wird der Array nicht mehr dem aktuellen Schlüssel zugewiesen und die Umformung geht dann verloren.

Lässt sich doof beschreiben, aber vielleicht erklärt sich's, wenn der Code korrigiert ist:

PHP-Code:
  function filter_array(&$arr) {
      foreach (
$arr as $key => $value) {
          if (
is_array($value)) {
              
filter_array($value);
              
$arr[$key] = $value/* diese Zeile fehlt */
          
} else {
              
$arr[$key] = htmlspecialchars($value ENT_QUOTES);
          }
      }
  } 
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 28.03.09, 22:55   #3 (permalink)
404
 
Benutzerbild von 404
 
Registriert seit: 28.11.04
404 Leistung: Z3
404 eine Nachricht über ICQ schicken
Likes: 0
Standard

Ich denke follgender Code sollte auch richtig sein.

PHP-Code:
<?php function filter_array(&$arr) {
      foreach (
$arr as $key => & $value) { /* das & ist hier entscheidend, damit der Wert als Referenz übergeben wird */
          
if (is_array($value)) {
              
filter_array($value);
          } else {
              
$arr[$key] = htmlspecialchars($value ENT_QUOTES);
          }
      }
  } 
?>
__________________
Major Fault, General Error and Colonel Panic came together to celebrate timeout.


------------------------------------------------
http://www.shick.de/
------------------------------------------------
404 ist offline   Mit Zitat antworten
Alt 29.03.09, 05:08   #4 (permalink)
Member of Honour
Themenstarter
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

ah okay, alles klar.
ich wusste nicht, dass das foreach ne kopie der werte erstellt
danke euch!
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » denkfehler bei rekursiven aufruf?
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Website aufruf & IP nCrypT Internet Allgemein 9 14.10.08 23:44
VPN Verbindung Denkfehler Pharaoo Network · LAN, WAN, Firewalls 2 30.03.08 18:27
C++ Array test - wo ist der Denkfehler? link Code Kitchen 5 11.09.07 17:17
Aufruf an die "Stammuser" throjan News & Ankündigungen 17 16.12.01 14:03


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61