Portal > Foren > PHP > PHP-Programmierung > Verschachtelte Arrays mit Werten füllen und sortieren
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 25.06.2007, 16:40 Nach oben    #1
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard Verschachtelte Arrays mit Werten füllen und sortieren

Hallo zusammen,

ich komm einfach nicht drauf, wie ich in enem Array verschiedene Array speichern kann.
Ich lese ein Verzeichnis aus, und nehme mir aus den vorhandenen Dateien verschiedene Informationen.
Die Information in der Datei:
PHP-Code:
function termin_info() {
    return array(
        
"section"        => "Termine",
        
"name"            => "Termine",
        
"description"    => "Einstellungen der Termine",
        
"version"        => "1.0.0",
        
"author"            => "Malte Gerth"
    
);

Ich möchte nun, in einer anderen datei, diese Informationen aus allen Dateien auslesen und in einem Array speichern, welches die Einträge nach der "section" sortiert und zusammenfasst.
Alle Informationsarrays mit der Section Termine sollen im Array unter einem Array gespeichert sein.

Es soll damit eine Liste erstellt werden, wo dann mehrere Dateien unter einer Section zu finden sind.

Könnt ihr helfen?
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.06.2007, 18:20 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Sorry Jan,
ich habe nicht verstanden, was du machen willst.

Kannst du bitte ein Beispiel bringen, wie
1. das aussieht was du hast
und
2. das aussieht, was du haben willst.

Danke.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.06.2007, 18:23 Nach oben    #3
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 690
Standard

Also wie du an den Inhalt des Arrays kommen willst musst du schon selber wissen, da kann ich dir leider nicht weiterhelfen (das heißt können schon, das würde aber den Rahmen sprengen).

Zur Frage ansich:

Wenn ich annehme, dass du eine While-Schleife zum Auslesen der Dateien benutzt und das Array aus der Datei in einem Array ($arrayFileInfo) speicherst, würde ich folgendermaßen vorgehen:

PHP-Code:
<?php

/* Code */

$arraySections = array ();

while (
/* Bedingung */)
{
  
$arrayFileInfo /* Hier das Array auslesen, wie auch immer */;

  if (
array_key_exists ('section'$arrayFileInfo) === TRUE)
  {
    
$stringSection = &$arrayFileInfo['section'];

    if (
is_array ($arraySection[$stringSection]) === FALSE)
    {
      
$arraySection[$stringSection] = array ();
    }

    
array_push ($arraySection$arrayFileInfo);

    unset (
$stringSection);
  }
}

/* Code */
?>
Damit hast du dann ein Array, welches anhand der Section alle Dateien in dem Array-Format beinhaltet, die du aus den Dateien ausliest. Eventuell müsstest du aber noch mit strtoupper() arbeiten, falls du keine einheitliche Groß- und Kleinschreibung verwendet haben solltest.

Ich hoffe das konnte dir weiterhelfen!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.06.2007, 18:35 Nach oben    #4
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard

Okay, neuer Versuch:

Dateisystem:
Code:
menu.php - Liest die Dateien alle ein
        /module/ - Hier liegen die Module
                ferien.php - das Modul Ferien
                termin.php - das Modul Termine
Der PHP Code
menu.php
PHP-Code:
<?php
/** Das Menü muss nochmal durchdacht werden, wegen den Sections **/
$module scandir("./module/");
foreach(
$module as $modul)
{
    if((
is_dir($modul) != TRUE) && ($modul != '.') && ($modul != '..'))
    {
        
$modulinfo explode('.',$modul);
        include_once 
"./module/".$modul;
        
$dynfunction $modulinfo['0'].'_info';
        
$modulinfo['info'] = $dynfunction();

/* Übergangslösung Start */
echo '<div class="acpmenu">
    <h1>'
.$modulinfo['info']['section'].'</h1>    <ul>';
/* Übergangslösung Ende */

        
echo '<li><a href="module.php?modul='.$modul.'" target="inhalt">'.$modulinfo['info']['name'].'</a></li>';

/* Übergangslösung Start */
echo '</ul>    </div>';
/* Übergangslösung Ende */
    
}
}
?>
ferien.php
PHP-Code:
<?php
function ferien_info() {
    return array(
        
"section"        => "Termine",
        
"name"            => "Ferien",
        
"description"    => "Einstellungen der Ferien",
        
"version"        => "1.0.1",
        
"author"            => "Malte Gerth"
    
);
}
// Noch mehr Code, alles als Funktionen ...
?>
termin.php
PHP-Code:
<?php
function termin_info() {
    return array(
        
"section"        => "Termine",
        
"name"            => "Termine",
        
"description"    => "Einstellungen der Termine",
        
"version"        => "1.1.0",
        
"author"            => "Malte Gerth"
    
);
}
// Noch mehr Code, alles als Funktionen ...
?>
Aussehen soll die Ausgabe so:
Code:
section
- name
- name
...
Zitat:
Termine
  • Ferien
  • Termine
Einstellungen
  • Backend
  • Frontend
und so weiter ...
Es wäre schön, wenn die Sections alphabetisch sortiert wären, genauso wie ihre Unterpunkte.
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.06.2007, 18:52 Nach oben    #5
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 690
Standard

Habe ich es also doch richtig verstanden. Du musst im Grunde genommen nur meinen Beispiel-Code in deinen integrieren. Wenn du nur den Namen und nicht das komplette Array speichern willst, kannst du das ja auch einfach abändern. Am Ende der Schleife musst du dann nur rekursiv das Array sortieren lassen, dafür gibt es ja bereits schöne Funktionen in PHP. In deinem Fall müsse glaube ich asort() die richtige Wahl sein.

Danach hast du im Grunde genommen genau das, was du haben wolltest.

Sorry, aber ich bin hier in einem Inet-Cafe und habe leider nicht mehr die genügende Zeit, das ausführlicher zu erklären, vielleicht schaffe ich es Mittwoch nochmal ins Inet.

MfG
Lutz
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.06.2007, 20:07 Nach oben    #6
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard

Schade, der Code klappt leider nicht.
ich bekomme nur die Informationen aus dem jeweils letzten Array.

Das Array $menu sollte ungefähr so aussehen:
Code:
Array
(
    [section] => Termine
    [inhalt] => Array
        (
           [0] => Array
                (
                    [section] => Termine
                    [name] => Ferien
                    [description] => Einstellungen der Ferien
                    [version] => 1.0.1
                    [author] => Malte Gerth
                )
           [1] => Array
                (
                    [section] => Termine
                    [name] => Termine
                    [description] => Einstellungen der Termine
                    [version] => 1.1.0
                    [author] => Malte Gerth
                )
        )
)
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz

Geändert von Jan (25.06.2007 um 20:14 Uhr)
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.06.2007, 16:41 Nach oben    #7
Jan
Erfahrener Benutzer
 
Benutzerbild von Jan
 
Registriert seit: 08.01.2006
Ort: Mannheim
Beiträge: 483
Standard

So, nach einem Geistesblitz nachts,
hier wie es genau richtig funktioniert:

PHP-Code:
<?php
/** Funktioniert problemlos **/
$dateien scandir("./module/");
$menu = array();
foreach(
$dateien as $datei)
// für jede Datei
    
if((is_dir($datei) != TRUE) && ($datei != '.') && ($datei != '..'))
    { 
// Test der Datei
        
$modul explode('.',$datei);                     // Dateiname zerlegen
        
include_once "./module/".$datei;                    // Modul einbinden
        
$dynfunction $modul['0'].'_info';                // Die _info Funktion erstellen
        
$modulinfo $dynfunction();                        // Der Variablen die Informationen über die Funktion zuweisen
        
$modulinfo['datei'] = $datei;
        
$menu[$modulinfo['section']][] = $modulinfo;    // Die Informationen im $menu Array speichern
    
}
}
foreach(
$menu as $menupunkt)
{                                                                    
// für jede Section
    
foreach($menupunkt as $modul)
    {                                                                
// für jedes Modul
        
if($modul['section'] == $lastsection)
        {                                                            
// Das Modul ist in der selben Sektion wie das letzte
            
$lastsection $modul['section'];            // $lastsection bekommt die Sektion des aktuellen Modul
    
$gesamtmenu .= '<li> <a href="module.php?modul='.$modul['datei'].'" target="inhalt">'.$modul['name']."</a></li>\n";
        }
        else
        {
            
$lastsection $modul['section'];            // $lastsection bekommt die Sektion des aktuellen Modul
            
if($ul != '')                                        // Vor dieser Sektion gab es schon eine
            
{
                
$gesamtmenu .= "</ul>\n</div>\n";        // ul und div beenden, für sauberes HTML
            
}
                                                                    
// Für diese neue Sektion wir ein neues div geöffnet, sowie ul
    
$gesamtmenu .= '<div class="acpmenu"> <h1>'.$modul['section']."</h1> <ul>\n";
    
$gesamtmenu .= '<li> <a href="module.php?modul='.$modul['datei'].'" target="inhalt">'.$modul['name']."</a></li>\n";
            
$ul '1';                                            // Eine Sektion wurde neu erstellt; für Test s.o. ; für sauberes HTML
        
}
    }
}
$gesamtmenu .= "</ul>\n</div>\n";                        // Da keine Sektion oder Menüpunkt mehr kommt, ul und div beenden
print $gesamtmenu;                                            // Das Menü anzeigen
?>
__________________
Jan
info.malte-gerth.de
=================================
Nutzt bitte lieber Jabber statt ICQ:
malte.gerth@jabber.cz
Jan ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eine SELECT-Liste mit Werten aus MySQL-Tabelle füllen. doria PHP-Programmierung 14 20.01.2006 13:51
Vector nach werten sortieren Gottzilla Allgemeine Java-Programmierung 4 09.09.2005 16:12


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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 35 36 37 38 39 40 41 42 43 44 45