Ankündigung

Einklappen
Keine Ankündigung bisher.

Multidim. Arrays zusammenführen + Keine Duplikate + Bedingung

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

  • Multidim. Arrays zusammenführen + Keine Duplikate + Bedingung

    Guten Tag,

    ich habe 2 Multidim. Arrays mit Daten aus der Datenbank, die z.B. so aussehen:

    $ComputerMapping:

    Code:
    Array
    (
        [0] => Array
            (
                [PrinterName] => PRT01_Zentral
                [PrintServer] => DC01
                [isDefaultPrinter] => 0
            )
    
        [1] => Array
            (
                [PrinterName] => PRT02_BH
                [PrintServer] => DC01
                [isDefaultPrinter] => 1
            )
    
        [2] => Array
            (
                [PrinterName] => PRT03_EDV
                [PrintServer] => DC01
                [isDefaultPrinter] => 0
            )
    
        [3] => Array
            (
                [PrinterName] => PRT04_GL
                [PrintServer] => DC01
                [isDefaultPrinter] => 0
            )
    
    )

    $UserMapping:

    Code:
    Array
    (
        [0] => Array
            (
                [PrinterName] => PRT01_Zentral
                [PrintServer] => DC01
                [isDefaultPrinter] => 0
            )
    
        [1] => Array
            (
                [PrinterName] => PRT02_BH
                [PrintServer] => DC01
                [isDefaultPrinter] => 0
            )
    
        [2] => Array
            (
                [PrinterName] => PRT03_EDV
                [PrintServer] => DC01
                [isDefaultPrinter] => 1
            )
    
    )

    Ich möchte die beiden Arrays jetzt zusammenführen.
    • Es soll keine Duplikate von den ["PrinterName"]-Values geben.
    Zusätzlich gibt es noch die Sache mit dem ["isDefaultPrinter"]:
    • Im Array $ComputerMapping hat entweder gar kein oder maximal ein Element diesen Wert auf True.
    • Im Array $UserMapping hat entweder gar kein oder maximal ein Element diesen Wert auf True.
    • Im zusammengeführten Array soll der Wert nur einmal True sein. Anhand einer IF-Bedingung soll entschieden werden, aus welchem Array der Wert den Vorzug bekommt.
    Erwartetes Ergebnis ...

    if ( $PreferComputerDefaultPrinter == true ) {

    Code:
     Array
     (
      [Printers] => Array
       (
        [0] => Array
         (
          [PrinterName] => PRT01_Zentral
          [PrintServer] => DC01
         )
    
        [1] => Array
         (
          [PrinterName] => PRT02_BH
          [PrintServer] => DC01
         )
    
        [2] => Array
         (
          [PrinterName] => PRT03_EDV
          [PrintServer] => DC01
         )
    
        [3] => Array
         (
          [PrinterName] => PRT04_GL
          [PrintServer] => DC01
         )
    
       )
    
      [DefaultPrinter] => PRT03_EDV 
     )
    } else {

    Code:
     Array
     (
      [Printers] => Array
       (
        [0] => Array
         (
          [PrinterName] => PRT01_Zentral
          [PrintServer] => DC01
         )
    
        [1] => Array
         (
          [PrinterName] => PRT02_BH
          [PrintServer] => DC01
         )
    
        [2] => Array
         (
          [PrinterName] => PRT03_EDV
          [PrintServer] => DC01
         )
    
        [3] => Array
         (
          [PrinterName] => PRT04_GL
          [PrintServer] => DC01
         )
    
       )
    
      [DefaultPrinter] => PRT02_BH 
     )
    }


    Ich stehe komplett an und habe noch keine Codezeile.
    Wie komme ich hier weiter?

    Danke


  • #2
    Zum Zusammenführen der Arrays habe ich die folgende Funktion benutzt:

    PHP-Code:
       function array_merge_recursive_distinct( array &$array1, array &$array2 ) { $merged $array1; foreach ($array2 as $key => &$value) {     if (is_array($value) && isset($merged[$key]) && is_array($merged[$key]))     {         $merged[$key] = array_merge_recursive_distinct($merged[$key], $value);     }     else     {         $merged[$key] = $value;     } } return $merged; } 
    Bei der Bedingung zum Setzen des ["isDefaultPrinter"] habe ich noch keinen Lösungsansatz ...

    Kommentar


    • #3
      PHP-Code:
      function unique_multidim_array($array$key) {
          
      $temp_array = array();
          
      $i 0;
          
      $key_array = array();

          foreach(
      $array as $val) {
              if (!
      in_array($val[$key], $key_array)) {
                  
      $key_array[$i] = $val[$key];
                  
      $temp_array[$i] = $val;
              }
              
      $i++;
          }
          return 
      $temp_array;
      }

      $merged_array array_merge($first_array,$second_array);

      $unique_array unique_multidim_array($merged_array'PrinterName');

      echo 
      '<pre>';
      echo 
      print_r($unique_array);
      echo 
      '</pre>'
      Funktion dem ersten Benutzerkommentar bei array_unique.entnommen.

      Kommentar


      • #4
        Danke, damit erhalte ich ein zusammengeführtes Array.

        Hast du auch einen Ansatz, für das geschilderte Thema mit dem ["isDefaultPrinter"]?
        Ist es verständlich, was ich da geschrieben habe?
        Wahrscheinlich müsste ich noch vor dem array_merge mit einer Bedingung entweder beim Einen oder beim Anderen Array den [isDefaultPrinter] auf false setzen, sofern vorhanden oder?

        Kommentar

        Lädt...
        X