tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
871
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Daywood Daywood ist offline Grünschnabel
    Registriert seit
    Jun 2007
    Beiträge
    4
    Hallo zusammen,

    ich habe jetzt schon eine ganze weile gesucht und probiert, aber leider nichts gefunden. Es geht darum, dass ich aus einem Array:
    PHP-Code:
    array(123); 
    alle möglichen Kombinationen, d.h. 123,231,312,132,321,213 erhalten will. Da habe ich jetzt rausgefunden, dass man dies rekursiv machen kann, was auch super funktioniert. Mein Problem ist jetzt aber, dass ich feste Werte festlegen möchte. Das heißt z.B., dass der zweite Wert nicht verändert werden kann. Das Array dafür hatte ich mir so vorgestellt:
    PHP-Code:
    array(010); 
    Mögliche Kombinationen wären dann nur noch 123 und 321. Kann mir irgendwer einen Tip geben, wie ich das in eine Rekursion wie diese hier:
    PHP-Code:
    function permutation$chars$length )
    {
        if( 
    $length OR !is_array$chars ) OR empty( $chars ) )
        {
            return 
    $chars;
        }
        
    $result = array();
        foreach( 
    $chars as $key => $value )
        {
            
    $cChars $chars;
            unset( 
    $cChars[$key] );
            
    $sub permutation$cChars$length 1);
            foreach(
    $sub as $subvalue)
            {
                
    $result[] = $value .' '.$subvalue;
            }
        }
        return 
    $result;
    }

    $chars = array(123);
    print_r(permutation($chars3)); 
    Quelle: http://www.tutorials.de/forum/php/31...erstellen.html
    einfügen kann?

    Vielen Dank schonmal!
     

  2. #2
    DeluXe DeluXe ist offline Funkjoker
    Registriert seit
    Jul 2004
    Ort
    Offenburg
    Beiträge
    847
    Aufbauend auf welche Logik? Oder sollen zufällig irgendwelche Werte nicht änderbar sein?
     
    mfg

    DeluXe

  3. #3
    Daywood Daywood ist offline Grünschnabel
    Registriert seit
    Jun 2007
    Beiträge
    4
    Die Werte, die nicht änderbar sein sollen, werden (von mir/dem Benutzer) vorgegeben. Ich wollte also eine Funktion erstellen, welche als Array die Werte sowie die nicht änderbaren Stellen entgegennimmt und alle möglichen Kombinationen zurückgibt.
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Wieder mal ein wneig Gehirnakrobatik. Meine Lösung ist sicher nicht perfekt, aber sie geht...

    Code PHP:
    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
    
    $chars = array(1, 2, 3);
    $blocked = array(0, 1, 0);
     
    // array erstellen der die blokierten Werte enthaltet
    // $map = array{[1] => 2}
    $map =  array_filter(array_map(create_function('$b, $c', 'return $b == 1 ? $c : false;'), $blocked, $chars));
     
    // Differenz mit dem Key (Position) ermitteln
    // $ch = array{[0] => 1, [2] => 3}
    $ch = array_diff_key($chars, $map);
     
    // permutation ausführen
    // $ch = array {[0] => "1 3", [1] => "3 1"}
    $ch = permutation($ch, count($ch));
     
    // Die Ausgabe in Array splitten
    // array{[0]=>array{[0]=>"1", [1]=>"3"}, [1]=>array{[0]=>"3", [1]=>"1"}}
    $ch = array_map(create_function('$c', 'return explode(" ", $c);'), $ch);
     
    function combinePermutationWithMap(&$char, $key, $map){
        foreach ($map as $pos => $value){
            array_splice($char, $pos, 0, $value);                
        }
    }
     
    // Die Resultatarrays mit $map kombinieren
    // array{[0]=>array{[0]=>"1", [1]=>2, [2]=>"3"}, [1]=>array{[0]=>"3", [1]=>2, [2]=>"1"}}
    array_walk($ch, 'combinePermutationWithMap' , $map);
     
    // Die Resultatarrays wieder in Strings wandeln
    // $ch = array {[0] => "1 2 3", [1] => "3 2 1"}
    $ch = array_map(create_function('$c', 'return implode(" ", $c);'), $ch);
     
    var_dump($ch);
     
    ---------------------------------------------------------------------------------------------------
    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. Antworten: 9
    Letzter Beitrag: 16.04.10, 00:00
  2. Antworten: 0
    Letzter Beitrag: 24.10.07, 21:25
  3. Alle möglichen Kombinationen
    Von Snape im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 3
    Letzter Beitrag: 21.09.05, 12:07
  4. Antworten: 1
    Letzter Beitrag: 26.05.04, 18:33
  5. Eingabehilfe für Formulare mit festen Werten
    Von mbuehren im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 12.05.04, 16:40