tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
364
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    seomaniac seomaniac ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    18
    Guten Abend liebe Comm,

    ich habe wiedermal ein kleines Problem und leider komme ich an dieser Stelle nicht weiter.


    zu den Gegebenheiten:

    ich habe ein Formular für die vorauswahl "multiple"

    dort stehen z.b. 5 werte wovon eines aber auch 5 ausgewählt werden können.

    nennen wir sie value1 - value5.

    diese werden per $_POST übergeben und stehen in einem array.

    in der nächsten php habe ich nun schon vordefinierte arrays

    PHP-Code:
    $value1 = array( 'bla''blubb');
    $value2 = array( 'blubb''kaese');
    $value3 = array( 'bla''blubb''alien');
    $value4 = array( 'bla''maus');
    $value5 = array( 'iltis'); 
    nun möchte ich das die per $_POST übergebenen Werte im bsp. value2 und value4
    merged werden.

    PHP-Code:
    //sieht beispielsweise so aus zur veranschaulichung:

    $uebergabe = array('value2''value4'); 
    es soll zu
    PHP-Code:
    $merged array_merge ($value2$value4); 
    hab es bereits mit einer foreach Schleife versucht das $ davor zu bekommen aber das wird dann nicht als Verweiß zu den vorhanden Arrays erkannt.

    vielen Dank für Hilfreichen tips.
    liebe grüße
     

  2. #2
    seomaniac seomaniac ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    18
    Bin nun einen anderen weg gegangen und Durchsuche das Array auf Inhalt mit:

    codebeispiel falls jemand das selbe problem haben sollte:

    PHP-Code:
    $merged = array();
        if       (
    in_array('a1',$skills)) { $merged array_merge ($merged$a1);};
        if       (
    in_array('b1',$skills)) { $merged array_merge ($merged$b1);};
        if       (
    in_array('c1',$skills)) { $merged array_merge ($merged$c1);}
        else { } 
     

  3. #3
    Avatar von Yaslaw
    Yaslaw Yaslaw ist gerade online n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ich würde dir gerne einen eleganten Weg aufzeigen. Doch sehe ich in deinem Beispiel nicht, wie das Endresultat aussehen soll.
    Ebenfalls sehe ich nicht, was bei deiner Lösung eigentlich die Arrays $skilsl und $a1 bis $c1 sind. Passt irgendwie absolut nicht mit deinem ersten Beitrag zusammen.
    seomaniac bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  4. #4
    seomaniac seomaniac ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    18
    PHP-Code:

    if(!isset($_POST['wahl'])){ exit('Bitte eine auswahl Vornehmen'); };

    //vordefinierte werte
    $vorname 'testvn';
    $name 'testname';
    $plz 'testplz';
    $ort 'testort';
    $str 'teststraße';
    $test 'test';


    //welche auswahl was beinhaltet
    $a1 = array( $vorname$name );
    $b1 = array( $vorname$name$plz$ort$str );
    $c1 = array( $vorname$name$test );

    //zusammenführen
    $merged = array();
        if       (
    in_array('a1',$wahl)) { $merged array_merge ($merged$a1);};
        if       (
    in_array('b1',$wahl)) { $merged array_merge ($merged$b1);};
        if       (
    in_array('c1',$wahl)) { $merged array_merge ($merged$c1);}
        else { }
            
    //doppelte werte löschen
    $short array_unique $merged );

    //zum schluss werden mit einer foreach schleife die values untereinander ausgegeben 
    mir wäre es natürlich lieber wenn ich auf part //zusammenführen verzichten könnte
    weil ich immer sobald ich z.b. noch d1 und e1 etc. hinzufüge (was vorkommen wird)
    im code immer ein neues if erstellen muss.

    lg

    /e: obwohl das auch nicht unbedingt ein beinbruch sein wird aber umso mehr dynamik umso besser
    Geändert von seomaniac (19.01.12 um 16:59 Uhr)
     

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist gerade online n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Also
    $wahl ist ein Array. Der beinhaltet eine Mehrfachselektion 'a1' bis 'c1'. Anhand von dem zeigst du die Arrays zusammen und reduzierst sie auf die grösste eindeutige Menge.

    Hier mal meine generische Lösung. Ich setze die Werte wie auch die Pattern in Arrays. Damit lässt sich einfacher arbeiten.
    PHP-Code:
    //Testdaten
    $wahl = array('a1''c1');

    //vordefinierte werte
    $values = array(
            
    'vorname'   => 'testvn',
            
    'name'      => 'testname',
            
    'plz'       => 'testplz',
            
    'ort'       => 'testort',
            
    'str'       => 'teststraße',
            
    'test'      => 'test');


    //welche Auswahl was beinhaltet
    $patterns['a1'] = array( 'vorname''name' );
    $patterns['b1'] = array( 'vorname''name''plz''ort''str' );
    $patterns['c1'] = array( 'vorname''name''test' );

    //Ab hier müssen auch bei mehr möglichen Werten oder Pattern nix mehr geändert werden.

    //Bei jedem Pattern as den Werten Schlüssel machen. Aus dem Index wird ein Wert. 
    //Der kann uns aber egal sein. Er wird eh nicht gebraucht
    //Resultat:  $patterns['a1'] = array( 'vorname' => 0, 'name' => 1 )
    $patterns array_map('array_flip'$patterns);

    //die Patterns gemäss $wahl auswählen
    $selectedPatterns array_intersect_key($patternsarray_flip($wahl));

    //Die Patterns zu einer eindeutigen Auswahl zusammenziehen
    //Alle PAtterns dem array_merge übergeben. Die Schlüssel bleiben dabei eindeutig
    $selection call_user_func_array('array_merge'$selectedPatterns);

    //und die Werte zuweisen. Es werden alle Werte des ersten Arrays übernommen, welche
    //übereinstimmende Schlüssel mit dem zweiten Array haben.
    $result array_intersect_key($values$selection);

    var_dump($result); 
    Ausgabe:
    Code :
    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
    
    // Ausgabe für a1 & c1
    array(3) {
      ["vorname"]=>
      string(6) "testvn"
      ["name"]=>
      string(8) "testname"
      ["test"]=>
      string(4) "test"
    }
     
    //Ausgabe für b1 & c1
    array(6) {
      ["vorname"]=>
      string(6) "testvn"
      ["name"]=>
      string(8) "testname"
      ["plz"]=>
      string(7) "testplz"
      ["ort"]=>
      string(7) "testort"
      ["str"]=>
      string(10) "teststraße"
      ["test"]=>
      string(4) "test"
    }
    seomaniac bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  6. #6
    seomaniac seomaniac ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    18
    Oha, sehr ausführlich, dank Dir!
    Ich teste es mal und schau mir die php maual an was die Befehle bewirken, bin ja fast noch blutiger Anfänger und da sind mir wiederrum einige neu

    ich geb dann natürlich Antwort.

    Hätte aber direkt noch eine Frage:

    wie Verhält es sich wenn z.b. im $wahl array
    ein anderer Wert auftaucht oder er nicht gesetzt ist durch z.b. Manipulation der Übergabe?

    lg s/m.
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist gerade online n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Das müsste in dieser Zeile sein
    PHP-Code:
    //die Patterns gemäss $wahl auswählen
    $selectedPatterns array_intersect_key($patternsarray_flip($wahl)); 
    Das Besipiel aus der PHP-Doku
    PHP-Code:
    $array1 = array('blau' => 1'rot'  => 2'grün' => 3'violett' => 4);
    $array2 = array('grün' => 5'blau' => 6'gelb' => 7'türkis'  => 8);
    var_dump(array_intersect_key($array1$array2));
    /**
    result :
    array(2) {
      ["blau"]=>
      int(1)
      ["grün"]=>
      int(3)
    })
    */ 
    Wie du siehst, hats auch da in $array2 (in unserem Fall $wahl) Einträge die im ersten Array nict vorhanden sind (Schlüssel gelb und türkis). Sie werden also im ersten Array nicht ausgewählt.
    Ergo werden so automatisch alle ungültigen Übergaben ausgefiltert.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. array_merge Problem
    Von Hallasas im Forum PHP
    Antworten: 14
    Letzter Beitrag: 03.08.07, 17:41
  2. PHP5 und array_merge
    Von xtratz im Forum PHP
    Antworten: 6
    Letzter Beitrag: 18.04.06, 14:52
  3. Antworten: 4
    Letzter Beitrag: 22.03.06, 20:50
  4. SELECT-Abfrage ueber 2 Tabellen - array_merge
    Von funkyvino im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 08.02.05, 16:29
  5. Antworten: 6
    Letzter Beitrag: 13.06.02, 12:29