Ankündigung

Einklappen
Keine Ankündigung bisher.

Array mit verschachtelten inneren Array auslesen und leere Felder rausschmeißen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Array mit verschachtelten inneren Array auslesen und leere Felder rausschmeißen

    Hallo, ich habe ein riesen Problem, bei dem ich überhaupt nicht weiter komme. Hauptproblem ist wahrscheinlich, dass ich relativ neu in PHP bin und bestimmt Konzepte noch nicht verstehe.
    Ich versuche gerade ein php-Skript für meine Webseite anzupassen.
    Hauptproblem bei dem Mail-Skript ist, dass dort auch leere Felder per Mail versendet werden.
    Das Formular ist mit verschachtelten Arrays aufgebaut. Also ein Array kann ein Array enthalten, dieses wiederum auch, ... usw.
    Nun möchte ich per Mail ein bestimmtes Array verschicken, auf das ich auch zugreifen kann
    $form_values['submitted_tree']

    Dieses kann ich nun nach leeren Feldern durchsuchen und rausnehemn:

    PHP-Code:
    foreach ($form_values['submitted_tree'] as $key => $value) {
        if (
    $value == '') {
                   unset(
    $form_values['submitted_tree'][$key]);
        }
    }
    print 
    theme('webform_mail_fields'0$form_values['submitted_tree'], $node);
    ?> 
    Nun ist aber die Ausgabe von $value auch manchmal ein neues Array also
    is_array($value) ist wahr.
    Nun habe ich aber keinen Plan, wie ich dieses neue Unterarray anspreche und auch dort nach leeren Feldern suche.
    Ich habe es folgendermaßen probiert, was aber überhaupt keine Änderung bring.

    PHP-Code:
    foreach ($form_values['submitted_tree'] as $key => $value) {
        if (
    $value == '') {
                   unset(
    $form_values['submitted_tree'][$key]);
        }
        if( 
    is_array($value) ) {
            foreach (
    $form_values['submitted_tree'][$key] as $key2 => $value2) {
                 if (
    $value2 == '') {
                        unset(
    $form_values['submitted_tree'][$key][$key2]);
                 }
             }
        }
    }
    print 
    theme('webform_mail_fields'0$form_values['submitted_tree'], $node);
    ?> 
    Wie gesagt, habe ich zwischen Funktion 1 und 2 keinerlei Änderung in der resultierenden E-Mail. Wahrscheinlich mache ich hier was grundsätzlich falsch. Könnt ihr mir helfen? Bin schon seid Tagen dabei mir über das Internet ne Lösungsmöglichkeit zu suchen aber bisher ohne Erfolg ;-(

    Vielleicht noch wichtig ist ein Auszug des Gesamtarrays:
    Code:
    ....
    
    [submitted_tree] => Array
     (
     [bezeichnung1] => Die Hauptangabe
     [anzahl] => 1
     [weitere_angabe] => Array
     (
     [bezeichnung2] =>
     [anzahl2] =>
     [weitere_angabe] => Array
     (
     [bezeichnung3] =>
     [anzahl3] =>
    
    ... usw
    Wichtig ist auch, dass ich mich hier schon gar nicht mehr auf der Hauptebene des Arrays befinde, sondern nur ein Sub-Array weiter auslesen möchte.

    Hoffe, hier kann mir jemand helfen!

    vistree


  • #2
    Unter PHP: array_filter - Manual wird in den user contributed notes eine Funktion array_filter_recursive vorgestellt, die Dir vielleicht weiterhilft.

    Kommentar


    • #3
      Hallo David,
      danke für den Tipp.
      Habe es ausprobiert, aber irgendwie komme ich auch hier nicht über die erste Ebene hinweg ;-(

      Also, die von dir genannte Funktion lautet im Original:
      PHP-Code:
      <?php
        
      function array_filter_recursive($input)
        {
          foreach (
      $input as &$value)
          {
            if (
      is_array($value))
            {
              
      $value array_filter_recursive($value);
            }
          }
         
          return 
      array_filter($input);
        }
      ?>
      Jetzt habe ich versucht, dass auf meine Verhältnisse anzupassen, was aber irgendwie nicht richtig funzt ;-(

      PHP-Code:
        function array_filter_recursive($form_values)
        {
          foreach (
      $form_values as $value)
          {
            if (
      is_array($value))
            {
              
      $value array_filter_recursive($value);
            }
          }

          return 
      array_filter($form_values);
        } 
      Wenn ich foreach direkt verwende, ohne das in eine Funktion einzubetten,
      dann funktioniert es zumindest auf oberster Ebene. Hier muss ich dann aber aus $form_values auch das $form_values['submitted_values'] machen.

      Setze ich das $form_values['submitted_values'] statt $input überall ein, so krieg ich ne Fehlermeldung bezüglich dem [ vom submitted_values. Geht also auch nicht.
      Ich bin total aufgeschmissen und weiß einfach nicht wie ich hier vernünftig umsetze.

      Noch jemand einen Tipp für mich?

      Viele Grüße

      vistree

      Kommentar

      Lädt...
      X