php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.07.2010, 09:49  
Neuer Benutzer
 
Registriert seit: 20.07.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
cikono1 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Mehrdimesionales Array Zusammenfassen

Hallo zusammen,

ich habe folgendes Array:

Code:
$doc = array( 0 => array('type' => 'Datenblatt', 'language' => 'DE', 'file' => 'xyz_de.pdf'),
              1 => array('type' => 'Datenblatt', 'language' => 'EN', 'file' => 'xyz_en.pdf'), 
              2 => array('type' => 'Datenblatt', 'language' => 'FR', 'file' => 'xyz_fr.pdf'),
              3 => array('type' => Zeichnung, 'language' => 'EN, 'file' => 'zeichnung_en.pdf'))
Nun möchte ich, dass er mir anhand vom Key 'type' das Array zusammenfasst. Das könnte vielleicht dann so aussehen:

Code:
$doc = array( 0 => array(
                     'Datenblatt' => array( 
                                     0 => array('language' => 'DE', 'file' => 'xyz_de.pdf'),
                                     1 => array('language' => 'EN', 'file' => 'xyz_en.pdf'), 
                                     2 => array('language' => 'FR', 'file' => 'xyz_fr.pdf')
                     ),
              1 => array(
                     'Zeichnung' => array( 
                                     0 => array('language' => 'DE', 'file' => 'zeichnung_de.pdf')
                      )
            )
Ich hoffe ihr versteht mein Anliegen

Viele Grüße
cikono1 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.07.2010, 09:58  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Moin,

hast du schon eigene Ansätze anzubieten?
Asipak ist offline  
Alt 20.07.2010, 10:01  
Neuer Benutzer
 
Registriert seit: 20.07.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
cikono1 befindet sich auf einem aufstrebenden Ast
Standard

Ich habe es mal mit array_unique probiert, aber ohne Ergebnis.

Die Daten (Datenblatt, EN und xyz_de.pdf) kommen aus einer ewig großen und verschachteltem Array.
cikono1 ist offline  
Alt 20.07.2010, 10:09  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Mit array_unique entfernst du doppelte Einträge, also nicht das, was du machen möchtest, oder? Du könntest zunächst mal ein neues Array initialisieren
Code:
$result = array();
und dann anfangen das Array $doc zu durchlaufen. Ich würde dabei dann aber etwas von deiner geforderten Struktur abweichen und die erste Ebene im Array weglassen, sodass es so aussieht:
Code:
Array
(
    [Datenblatt] => Array
        (
            [0] => Array
                (
                    [language] => DE
                    [file] => xyz_de.pdf
                )

            [1] => Array
                (
                    [language] => EN
                    [file] => xyz_en.pdf
                )

            [2] => Array
                (
                    [language] => FR
                    [file] => xyz_fr.pdf
                )

        )

    [Zeichnung] => Array
        (
            [0] => Array
                (
                    [language] => EN
                    [file] => zeichnung_en.pdf
                )

        )

)
Denn was hast du mit der ersten Ebene vor? Diese ist unnötig, oder nicht?

Während du das Array $doc durchläufst, prüfst du immer, ob bereits ein Schlüssel existiert, der den Namen hat, wie das aktuelle Element unter dem Schlüssel type. Wenn nicht, fügst du ein neues Array unter dem Schlüssel hinzu:
PHP-Code:
$result = array();
foreach (
$doc as $el) {
  if (!
array_key_exists($el['type'], $result)) {
    
$result[$el['type']] = array();
  }

  
// ...

Dann musst du lediglich noch die restlichen Einträge unter language und file aus dem Array in dein Ergebnisarray schieben. Dabei kann dir z.B. http://php.net/array_splice behilflich sein.
Asipak ist offline  
Alt 20.07.2010, 11:13  
Neuer Benutzer
 
Registriert seit: 20.07.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
cikono1 befindet sich auf einem aufstrebenden Ast
Standard

Super vielen Dank habs nun hinbekommen!

Für alle die einen ähnlichen Ansatz suche, hier die Lösung:

Code:
$result = array();
  $u = 0;
  foreach($doc as $el) {
    if(!array_key_exists($el['type'], $result)) {
        $result[$el['type']] = array();
    }
    $result[$el['type']][$u]['language'] = $el['language'];
    $result[$el['type']][$u]['file'] = $el['file'];
      
    $u++;
  }
cikono1 ist offline  
Alt 20.07.2010, 11:15  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Mit array_slice() sparst du dir noch die ein oder andere Zeile
PHP-Code:
$result = array();
foreach (
$doc as $el) {
  if (!
array_key_exists($el['type'], $result)) {
    
$result[$el['type']] = array();
  }

  
$result[$el['type']][] = array_slice($el1);


Geändert von Asipak (20.07.2010 um 11:51 Uhr). Grund: array_splice durch array_slice ersetzt
Asipak ist offline  
Alt 20.07.2010, 11:26  
Neuer Benutzer
 
Registriert seit: 20.07.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
cikono1 befindet sich auf einem aufstrebenden Ast
Standard

array_splice() habe ich bisher noch nicht verwendet, aber das läuft ja super

DANKE
cikono1 ist offline  
Alt 20.07.2010, 11:50  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Ups, habe mich sogar vertan, ich meinte PHP: array_slice - Manual. array_splice funktioniert zwar ebenso, kann aber noch mehr und ist daher vermutlich inperformanter.

Habe mal die Funktion in meinem Codeschnipsel geändert.

Gruß

Geändert von Asipak (20.07.2010 um 11:54 Uhr).
Asipak ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Feed in Datenbank eintragen (Formate: json, php serialized, xml) high_five Datenbanken 5 17.06.2010 03:04
[Erledigt] Sortierung mehrerer Arrays philosapiens PHP Tipps 2010 16 08.06.2010 05:22
IE8 verliert Session Lenki PHP-Fortgeschrittene 10 25.04.2010 01:10
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
[Erledigt] Tabellen die sich selbst referenzieren Squall PHP Tipps 2009 19 04.08.2009 21:33
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
array zusammenfassen, php mehrdimensionales array zusammenfassen, http://www.php.de/php-einsteiger/69868-erledigt-mehrdimesionales-array-zusammenfassen.html, php mehrdimensionales array zusammenfügen, php array_splice mehrdimensionales array, array_splice mehrdimensional, php arrays zusammenführen, doppelte einträge array mehrdimensional php, array_splice mehrdimensionales array, php mehrdimensionales array gruppieren, array_unique mehrdimensional, mehrdimensionales array zusammenfügen, php array, zwei multiarray zusammenfassen, multi array zusammenfügen, php language array, json doppelter wert, php array zusammenfassen, mehrdimensionales array zusammenführen, php array schieben

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:10 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum