associative array Gruppenwechsel?

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

  • associative array Gruppenwechsel?

    Guten Tag!

    Ich habe ein assoziatives array. (Silverstripe 3.1)
    Code:
    $myArray = array('Technik' => 'Paul', 'Script' => 'Paul', 'Schrift' => 'Paul', 'Beleuchtung' => 'Martin');
    und gebe es so aus:

    Code:
    $Info = ArrayList::create();
    foreach($myArray as $key => $value ){
                $fields = new ArrayData(array('FieldName' => $key, 'Value' => $value));
                $Info->push($fields);
            }     
            
            return $Info;
    das liefert mir in Silverstripe:

    Technik: Paul
    Script: Paul
    Schrift: Paul
    Beleuchtung: Martin

    Wie kann ich in der foreach - Schleife den Namen Paul mit seinen Tätigkeiten zusammenfügen?
    also 'FieldName' => $key sollte 'Technik, Script und Schrift' sein
    das sollte dann so aussehen:

    Technik, Script und Schrift: Paul
    Beleuchtung : Martin

    Gruppenwechsel? Ich kriegs nicht hin.
    Dank und Grüße. Anton
    Zuletzt geändert von anton_ag; 16.04.2015, 21:44.

  • #2
    Sollte wohl so klappen:

    PHP-Code:
    <?php

    $myArray 
    = array(
        
    'Technik'     => 'Paul',
        
    'Script'      => 'Paul',
        
    'Schrift'     => 'Paul',
        
    'Beleuchtung' => 'Martin'
    );

    $tmp = array();

    foreach (
    $myArray as $key => $value) {
        if (!
    array_key_exists($value$tmp)) {
            
    $tmp[$value] = array();
        }

        
    $tmp[$value][] = $key;
    }

    foreach (
    $tmp as &$value) {
        
    $count count($value);

        if (
    === $count) {
            
    $value $value[0];
        } else {
            
    $value implode(', 'array_slice($value0, -1)) . ' und ' $value[$count 1];
        }
    }
    unset(
    $value);

    $tmp array_flip($tmp);

    var_dump($tmp);
    Code:
    array(2) {
      ["Technik, Script und Schrift"]=>
      string(4) "Paul"
      ["Beleuchtung"]=>
      string(6) "Martin"
    }
    Achtung: Das mit dem array_flip ist nicht sinnvoll, wenn zwei Leute für die gleichen Dinge zuständig waren.
    Zuletzt geändert von mermshaus; 17.04.2015, 18:12.

    Kommentar


    • #3
      Hallo mermshaus

      herzlichen Dank!!!!

      wow! Perfekt!

      Anton.


      EDIT

      public function createInfoFields($InfoFieldArray){

      $tmp = array();
      foreach ($InfoFieldArray as $key => $value) {
      if (!array_key_exists($value, $tmp)) {
      $tmp[$value] = array();
      }
      $tmp[$value][] = $key;
      }

      foreach ($tmp as &$value) {
      $count = count($value);
      if (1 === $count) {
      $value = $value[0];
      } else {
      $value = implode(', ', array_slice($value, 0, -1)) . ' und ' . $value[$count - 1];
      }
      }
      unset($value);

      array_flip($tmp);
      $Info = ArrayList::create();
      foreach ($tmp as $key => $value) {
      $fields = new ArrayData(array('FieldName' => $value, 'Value' => $key));
      $Info->push($fields);
      }

      return $Info;
      }
      Zuletzt geändert von anton_ag; 18.04.2015, 05:04.

      Kommentar

      Lädt...
      X