# Übergabe Dateinummer der Audio im Link/Text an Arrey oder Variable für Wiedergabe der Audiodatei



## romacasa (27. Dezember 2020)

Hallo.
Ich arbeite an einer Webseite. in dieser Audiodateien gelistet werden (sehr viele - derweilen an die 300). Der Besucher soll im Inhaltsverzeichnis nachschauen, was er hören will. Ein klick - auf Button? auf Link? - soll eine Seite aufrufen, in der man die Audiodatei anhören und ebenso downloaden kann. (Ja, ich weiss Jeder Browser kann dies von Haus aus, ohne dass ich eine Webseite erstelle, aber schön ist diese Lösung nicht gerade. Zumal soll später andere Funktion(en) ergänzt werden - dies  nur nebenbei.)

Meine Vorstellung ist: Benutzer klickt; die Dateinummer der Audiodatei (Beispiel 321_01.mp3) wird in eine Variable übergeben. Dann wird die Wiedergabe-Webseite aufgerufen, Variable ausgelesen und dem Player und dem Downloadlink übergeben. Falls ich ein Auslesen des Audioverzeichnis für die Überprüfung  der vorhandene oder nichtvorhandene Datei brauche, dies habe ich bewerkstelligt. Nun stehe ich auf dem Schlauch, wie ich das andere umsetzen soll. Wäre ein Vorteil, wenn später noch was dazu kommt. Anfänglich hatte ich für JEDE Audiodatei eine eigene Wiedergabe-WEBSEITE geplant. Aber dies muss  einfacher möglich sein. Ein Multiplayer geht nicht, da die Audios KEINE Infos IN SICH TRAGEN, wie bei mp3 normalerweise der Fall ist. Der Besucher würde nur die Nummer sehen. Die Zeit habe ich auch nicht, alles anzuhören und zu katalogisieren.... Schön wäre auch ein Overlayout (Modal).

Meine Kenntnisse sind Anfängerbereich. Ich kann ein Formular programieren, was schon mein grösstes Projekt war - inkl. Schutz. 


Herzlichen Dank
Mit freundlichen Grüßen 
Romano Casnaova


----------



## ByeBye 284669 (28. Dezember 2020)

So etwas ähnliches habe ich vor nicht allzu langer Zeit mal gebastelt, hier die Quick&Dirty-Version:

index.php

```
<!DOCTYPE html>
<html>
  <head>
    <title>MP3-Files</title>
  </head>
  <body>
  <h2>Liste vorhandener MP3-Files:</h2>
  <table>
<?php
   $files = glob("mp3/*.mp3");
  
   sort($files);
  
   foreach ($files as $file)
     echo "<tr>
            <td>" . basename($file) . "</td>
            <td><a href='more.php?file=" . urlencode(basename($file)) . "'>Mehr...</td>
           </tr>\n";
?>
  </table> 
  </body>
</html>
```
more.php

```
<?php

   $file = urldecode($_GET['file']);
?>
<!DOCTYPE html>
<html>
  <head>
    <title><?php echo $file; ?></title>
  </head>
  <body>
  <h2><?php echo $file; ?></h2>
  <audio controls>
    <source src="mp3/<?php echo $file; ?>" type="audio/mpeg">
    Your browser does not support the audio element.
  </audio>
  Download: <a href="download.php?file=<?php echo urlencode(basename($file)); ?>">Klick mich</a>
 </body>
</html>
```
download.php

```
<?php
    $file = urldecode($_GET['file']);
    
    header("Content-Type: audio/mpeg");
    header("Content-Disposition: attachment; filename=\"mp3/$file\"");
    readfile($file);
?>
```

Verschönern und weitere Funktionen einbauen muss du selber machen, denn meine Vollversion poste ich hier nicht, wäre auch zu lang.


----------



## romacasa (28. Dezember 2020)

m.scatello hat gesagt.:


> So etwas ähnliches habe ich vor nicht allzu langer Zeit mal gebastelt, hier die Quick&Dirty-Version:
> 
> index.php
> 
> ...


Ja, danke. Würde sonst nichts lernen, wenn ich alles vorgekaut bekommen täte, oder? Werde es nun m,al versuchen.....


----------



## Sempervivum (28. Dezember 2020)

Statt einer Tabelle würde ich eher empfehlen, ein Gridlayout zu verwenden, dann tust Du dich leichter damit, ein responsives Verhalten zu erreichen, d. h. dass sich die Anzahl der Elemente in einer Zeile an die Breite des Browserfensters anpasst:
A Complete Guide to Grid | CSS-Tricks

Und von der Semantik her würde sich das figure-Tag für die Elemente anbieten:
HTML/Textstrukturierung/figure – SELFHTML-Wiki


----------



## ByeBye 284669 (28. Dezember 2020)

Sempervivum hat gesagt.:


> Statt einer Tabelle würde ich eher empfehlen, ein Gridlayout zu verwenden


Da hast du natürlich recht, aber wie gesagt, das ist eine Schmalspurversion, die ich aus meiner kompletten Version "rausgeschnitten" habe. Bei mir werden deutlich mehr Informationen dargestellt, dazu benutze ich getID3() -  Browse /getID3() 1.x/1.9.20 at SourceForge.net
Da ist eine Tabelle die bessere Wahl und responsive muss es in dem Fall auch nicht sein.


----------



## romacasa (31. Dezember 2020)

Herzlichen Dank für eure hilfe.

@m.scatello hier habe ich nun meinen Code.  Du siehst, hab mich bemüht. Der Code liesst das Audioverzeichnis aus, bereinigt, vergleicht  dessen Inhalt mit dem Inhaltsverzeichnis und bildet anhand der Anzahl von  mp3 Dateien im Audioverzeichnis das Inhaltsverzeichnis für den Benutzer, als link umgewandelt.

Wass ich aber noch möchte ist, dass 1. Wenn im Audio-Verzeichnis eine Datei da ist, die nicht im Inhaltsverzeichnis ist, dass eine Datei erstellt wird, in dieser die Nummer der mp3 notiert wird.   Damit weiss der Admin, dass man hier eine Datei hat, die zu ergänzen ist. Ebenso 2. wenn im Inhaltsverzeichnis einen Eintrag steht, der NICHT im Audioverzeichnis ist. Funktioniert dies ähnlich, wie ich es bereits gemacht habe? Was ich gerade lerne ist, Datei anlegen, und schreiben....

Das wichtigste ist: Schutz gegen Manipulation und Hack. Reicht dies so, oder muss ich hier noch was beachten?
HTML folgt noch......

Danke und ein gutes neues Jahr allen.

```
<?php
// arrays und variablen def mit inhalt oder leer
    $ordner = 'audios';
    $ergebnis = array();
  
  
// Ordner auslesen und inhalt in Variable speichern

    $audio = scandir($ordner);  

// ordnerangaben (..) und (.), (.mp3) entfernen
    $audio = array_diff($audio, array('..', '.',));
  
    foreach ($audio as $naudio) {
        $audios = substr($naudio, 0, -4);
        $audionew[] = $audios;
    }
  
  
// Einlesen des Inhaltsverzeichnisses und sortieren

    $inhverz = file("inh.txt");
    sort($inhverz, SORT_NATURAL);
  
// Abgleich mit Ordner und erstellung Inhaltsverzeichnis

    if (!empty($audio)) {

            foreach ($inhverz as $gueltig) {
                foreach ($audionew as $wert) {
              
                    if (strpos( $gueltig , $wert)){

                        echo "<a href='more.php?file=" . urlencode($wert) . "'>" . basename($gueltig) . "</a><br/>";      
                    }
                }
      
            }  
      
    }     else {
        echo "Die Audiodateien scheinen nicht vorhanden zu sein!";
    }
?>
```


----------



## ByeBye 284669 (1. Januar 2021)

Deine beiden foreach-Schleifen kann man optimieren, man braucht nur eine Schleife. Siehe dazu PHP: in_array - Manual dann brauchst du die innere Schleife nicht mehr.

Die Audio-Dateien kann du auf zwei Wegen Schützen:
Das Verzeichnis mit einem Passwort-Schutz versehen
Das Verzeichnis außerhalb von Document-Root ablegen, damit man nicht per http an die Dateien kommt


----------



## romacasa (3. Januar 2021)

@m.scatello Danke. Habe das mit dem in_array angeschaut und im Prinzip (so, wie auf php.de beschrieben) auch verstanden. Doch bei mir hängt irgendwas in der Umsetzung. Bekomme nur eine weisse Seite und Err_Reports einschalten bring auch nur eine weisse Seite (leeren Browser).

Noch eine Frage zu der Bearbeitung von Arrays, die danach in ein in ein neues array gespeichert werden. Ich habe den Code folgendermassen geändert:


```
if (strpos( $gueltig , $wert)){

    $ausgabe[] = array("<a href='more.php?file=" . urlencode($wert) . "'>" . basename($gueltig) . "</a><br/>");           
}
```
Dies soll deswegen sein, dass nicht das ganze HTML im Code, sondern nur die php-Ausgabe im HTML-Bereich stehen soll - der besseren Übersicht wegen  - so nebenbei. Die Ausgabe des array mittels print_r ergibt:


```
Array
(
    [0] => Array
        (
            [0] => <a href='more.php?file=331_01'>text Inhaltzverzeichnis...
</a><br/>
        )

    [1] => Array
        (
            [0] => <a href='more.php?file=324_02'>text Inhaltzverzeichnis...
</a><br/>
        )
```
etc.

Wenn ich dies richtig sehe, dann ist dies ein Array innerhalb eines Array, also multidimensional. 

Was mache ich bei der Übergabe falsch? Oder: mache ich was falsch? 

Danke der Hilfe.


Mit freundlichen Grüßen Romano


----------



## ByeBye 284669 (3. Januar 2021)

romacasa hat gesagt.:


> Oder: mache ich was falsch?


Das solltest du noch mal überdenken:

```
$ausgabe[] = array("<a href='more.php?file=" . urlencode($wert) . "'>" . basename($gueltig) . "</a><br/>");
```

Poste mal die inh.txt, kannst du ja verkürzen, zwei drei Zeilen reichen.


----------



## romacasa (3. Januar 2021)

@m.scatello Ok.... Ich denke........ Hmmmmmm......



hier, was im inh.txt steht:

Begegnung verwandelt -- Nr. 449_02 - Donnerstag 16.05.2002 - Ort: Eisenstadt/Bründlfeld
Begegnung verwandelt -- Nr. 465_03 - Freitag 13.12.2002 - Ort: Pfarre Herz Maria
Bereitet dem Herrn den Weg -- Nr. 413_02 - Sonntag 10.12.2000 - Ort: Maria Neustift
Bereit für die Begegnung mit Jesus -- Nr. 334_01 - Sonntag 09.08.1998 - Ort: Haus des Friedens, Katzelsdorf


----------



## ByeBye 284669 (3. Januar 2021)

$ausgabe ist ein Array. Und was packst du in das Array?

$ausgabe[] = *array*("....");


----------



## romacasa (3. Januar 2021)

Ahhhh, ok.  Wenn ich auf PHP.de lese, ist mir aufgefallen, dass die Beispiele nicht immer ganz eindeutig sind. Ein Beispiel verwendete $codes einmal als array und ein andermal - im selbigen code -als string. Macht es nicht ganz einfach, durchzusehen.  Danke. der Info.

Inhalt von inh.txt im Beitrag davor gepostet....


----------



## Sempervivum (3. Januar 2021)

Ich würde da ja gleich Nägel mit Köpfen machen und auf eine zeitgemäßere Lösung setzen, entweder mit einem Modal, wie Du ein deinem Eingangsposting geschrieben hattest oder mit einer Playlist, was eine gängige Lösung ist. Mit Modal würde eine Basisversion so aussehen:

```
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
include '_thread-tenses/connect.php';
?>
<!doctype html>
<html>

<head>
    <title>Audio Playlist</title>
    <style>
        figure {
            display:none;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
            margin: 0;
        }

        audio {
            outline: none;
        }
    </style>
</head>

<body>
<?php
$files = glob('audio/*.mp3');
foreach ($files as $file) {
    $name = basename($file, '.mp3');
    echo '<button value="' . $file . '">' . $name . '</button>';
}
?>
<figure>
    <audio controls></audio>
    <figcaption></figcaption>
    <span class="close-btn">Schließen</span>
</figure>
    <script>
        const fig = document.querySelector('figure');
        const aud = document.querySelector('figure audio');
        const figcapt = document.querySelector('figure figcaption');
        document.body.addEventListener('click', event => {
            if (event.target.classList.contains('close-btn')) {
                fig.style.display = 'none';
                aud.pause();
            } else {
                const src = event.target.value,
                    name = event.target.textContent;
                aud.src = src;
                aud.play();
                figcapt.textContent = name;
                fig.style.display = 'inline-block';
            }
        });
    </script>
</body>

</html>
```
Mit Playlist fast gleich, nur dass der Player immer sichtbar wäre und darunter die Liste der Audiodateien, scrollbar wenn es relativ viele sind wie in deinem Fall.


----------



## romacasa (3. Januar 2021)

Sempervivum hat gesagt.:


> Ich würde da ja gleich Nägel mit Köpfen machen und gleich auf eine zeitgemäßere Lösung setzen, entweder mit einem Modal, wie Du ein deinem Eingangsposting geschrieben hattest oder mit einer Playlist, was eine gängige Lösung ist. Mit Modal würde eine Basisversion so aussehen:
> 
> ```
> <?php
> ...


Danke, ich sehe mir diesen Code mal in Funktion an.... Playlist steht in der Ausgangsbeschreibung, warum es nicht geht. Die Suchfunktion der Seite, die Datum, einzelne Wörter des Titels, Kassettennummer Wochentag, Ort und später auch Stichwörter durchsucht, wäre nicht wirklich hilfreich, was zu finden.  Zudem soll das ganze nicht mehr Webadministrator-Abhängig sein.  Danke des Postes.


----------



## Sempervivum (3. Januar 2021)

> Playlist steht in der Ausgangsbeschreibung, warum es nicht geht.


Du meinst, dass die Audiodateien keine Metadaten haben? Eine Playlist i. w. S. würde die auch nicht brauchen, was Du dir vorstellst, dass man eine Liste mit den Namen bzw. Nummern sieht, könnte man auch als Playlist interpretieren.


----------



## romacasa (3. Januar 2021)

Sempervivum hat gesagt.:


> Du meinst, dass die Audiodateien keine Metadaten haben? Eine Playlist i. w. S. würde die auch nicht brauchen, was Du dir vorstellst, dass man eine Liste mit den Namen bzw. Nummern sieht, könnte man auch als Playlist interpretieren.


Ja, stimmt. Ich habe derweilen 480 Audiodateien da - und einiges an unbearbeitetes. Die müsste ich alle durcharbeiten, wenn ich sie mit Meta vergeben sollte. Und auch wenn ich Titeln vergeben täte, ist mir dies zu umständlich, da ich eh schon ein Inhaltsverzeichnis habe - siehe  Post 10 . Daher versuche ich diese Möglichkeit und interpretiere das Inhaltsverzeichnis als Playlist. Danke.

Habe das Modalskrip angesehen und versuche es mal zu integrieren. Danke.


----------



## Sempervivum (3. Januar 2021)

Noch eine Anmerkung zu dem Inhaltsverzeichnis. Du schreibst:


> Wass ich aber noch möchte ist, dass 1. Wenn im Audio-Verzeichnis eine Datei da ist, die nicht im Inhaltsverzeichnis ist, dass eine Datei erstellt wird, in dieser die Nummer der mp3 notiert wird. Damit weiss der Admin, dass man hier eine Datei hat, die zu ergänzen ist. Ebenso 2. wenn im Inhaltsverzeichnis einen Eintrag steht, der NICHT im Audioverzeichnis ist.


So etwas würde ich offline machen, d. h. ein getrenntes PHP-Skript als Werkzeug für den Admin, das beides, Inhaltsverzeichnis und Ordnerinhalt, vergleicht und die Differenzen anzeigt. Dann brauchst Du nicht den Umweg mit dem Anlegen einer Datei zu gehen.


----------



## romacasa (3. Januar 2021)

Sempervivum hat gesagt.:


> Noch eine Anmerkung zu dem Inhaltsverzeichnis. Du schreibst:
> 
> So etwas würde ich offline machen, d. h. ein getrenntes PHP-Skript als Werkzeug für den Admin, das beides, Inhaltsverzeichnis und Ordnerinhalt, vergleicht und die Differenzen anzeigt. Dann brauchst Du nicht den Umweg mit dem Anlegen einer Datei zu gehen.


Super idee. Danke euch allen.


----------



## Jan-Frederik Stieler (5. Januar 2021)

Hi,
Also wenn Du im Array HTML Code drinnen hast würde ich mir Gedanken machen ob du nicht was falsch gemacht hast.
Im Blick auf Layout und Logik zu trennen sollte sowas nicht passieren.
Auch gibts bei mir kein Echo mehr für html.
Da wird das php parsen beendet und nach dem html wieder gestartet.

Grüße


----------



## romacasa (27. März 2021)

Hallo Zusammen. Ich musste mich an einem anderne Projekt widmen, welches dringender war und nichts mit Web zu tun hat. Dies ist ja nur ein Hobby von mir. 

Zum Problem:

```
.....
$ausgabe = array();   
.....
if (!empty($audio) && !empty($inhverz)) {

            foreach ($inhverz as $gueltig) {
                
                $zeichen = substr($gueltig,0 ,1); // erster Buchstabe heruaarbeiten
                
                foreach ($audionew as $wert) {
                    
                    if ( $zeichen === "B"){
                        
                        
                            $ausgabe = array($zeichen => $gueltig);       

                    }
                }
        
            }   
            
        print_r($ausgabe);
        
    }     else {
        echo "Die Audiodateien oder das Inhaltsverzeichnis scheinen nicht vorhanden zu sein!";
    }
var_dump ($ausgabe);
```

Ich verstehe nicht, warum das Array $ausgabe immer nur einen Wert enthält, und zwar den letzten der liste.

Ausgabe: 


```
Array ( [B] => Bund Gottes mit uns Menschen -- Nr. 453_01 - Mittwoch 12.06.2002 - Ort: Purbach)
```

Das Array scheint überschrieben zu werden. Kann ich dies nicht so speichern, dass ich ausserhalb der Schleife ein volles Arrey habe? Da dies nur logisch ist, dass das geht: Wo mache ich den Fehler?

Danke der Hilfe.


----------



## Jan-Frederik Stieler (27. März 2021)

Hi,
Du kannst jeden Bezeichner (Key) in einem Array nur einmal verwenden.
Jetzt fragst Du nach B ab und schreibst das in die Variable. Beim nächsten Durchgang wird diese Var aber bei B wieder überschrieben. Um Werte in einer Var zu Verbinden musst Du einen Punkt hinter das = schreiben (=.). Aber da du immer auf B als Bezeichner testest würde Dein Array unlesbar bei mehreren B Bezeichnern.


----------



## Sempervivum (27. März 2021)

Jan Frederik ist mir zuvor gekommen. Ich hatte es etwas ausführlicher formuliert:
Hiermit
`$ausgabe = array($zeichen => $gueltig);`
weist Du ja bei jedem Schleifendurchlauf der Variablen $ausgabe ein Array zu. Das heißt, jedes Mal überschreibst Du das zuvor eingetragene Array wieder mit dem neuen. Du musst das so ändern:
`$ausgabe[$zeichen] = $gueltig;`
Aaaber: Mit diesem Code
`if ( $zeichen === "B"){`
prüfst Du ob $zeichen ein "B" ist, d. h. dieses
`$ausgabe[$zeichen] = $gueltig;`
würdest Du immer mit dem selben Schlüssel ausführen, so dass der alte Wert doch wieder überschrieben würde.
Leider geht aus deinem Code nicht hervor, was dieses $audionew ist und was Du damit vor hast, so dass ich nicht weiß, wie man das ändern muss, um das zuletzt genannte Problem zu umgehen.


----------



## romacasa (27. März 2021)

Ok, vertehe. Die Idee soll sein: Ich habe ein Inhaltsverzeichnis.

"Aber dies tut dies....
Auch so oft....
Busse ist nicht  Buße
Casa ist Haus auf Italienisch
etc."
Da die Ausgabe an einem bestimmten Bereiche der Webseite Alphabetisch geschieht, stelle ich dies mir so vor: Hauptarray ist $ausgabe. in diesem array kommt das array  'A', welches all jenen Text des Verzeichnisses beinhaltet, die mit A beginnen. usw.  Also 2 Ebenen.

Danach soll ich nur noch mit Ausgabe an dem Platz plaziert werden.

hier der ganze Code:

```
<?php

// arrays und variablen def mit inhalt oder leer
    $ordner = 'audios';
    $ausgabe = array();
    
// Einlesen des Inhaltsverzeichnisses und sortieren

    $inhverz = file("inh.txt");
    sort($inhverz, SORT_NATURAL);
  
    
// Ordner auslesen und inhalt in Array speichern

    $audio = scandir($ordner);
    
// ordnerangaben (..) und (.), und .mp3 entfernen
    $audio = array_diff($audio, array('..', '.',));
    
    foreach ($audio as $naudio) {
        $audios = substr($naudio, 0, -4);
        $audionew[] = $audios;
    
    }
    
// Abgleich inh.txt mit Ordner und erstellung Inhaltsverzeichnis

        
    if (!empty($audio) && !empty($inhverz)) {

            foreach ($inhverz as $gueltig) {
                
                $zeichen = substr($gueltig,0 ,1); // erster Buchstabe ermitteln
                
                foreach ($audionew as $wert) {
                    
                    if (strpos($gueltig , $wert) && $zeichen === "A"){
                        
                        
                            $ausgabe = array($zeichen => $gueltig);
                            
                    }
                }
        
            }   
        
    }     else {
        echo "Die Audiodateien oder das Inhaltsverzeichnis scheinen nicht vorhanden zu sein!";
    }
var_dump($ausgabe);

// Vorbereitung Für HTML Ausgabe

    
// echo('<a href='player.php?file=" . urlencode($wert) . "'>" . basename($gueltig) . "</a><br/>"');
//                       
?>
```
Danke der Hilfe.


----------



## Sempervivum (27. März 2021)

OK, ich denke, das verstehe ich jetzt, Du willst ein zweidimensionales Array aufbauen wo der Schlüssel des äußeren der Anfangsbuchstabe ist. Dann müsste es so funktionieren:

```
$ausgabe = array();   
.....
if (!empty($audio) && !empty($inhverz)) {

            foreach ($inhverz as $gueltig) {
                
                $zeichen = substr($gueltig,0 ,1); // erster Buchstabe heruaarbeiten

                // Erster Schlüssel ist das erste Zeichen.
                // Unter diesem Schlüssel gibt es jeweils ein weiteres
                // Array dem wir den Dateinamen hinzu fügen:
                $ausgabe[$zeichen][] = $gueltig;
                      
            }   
            
        print_r($ausgabe);
        
    }     else {
        echo "Die Audiodateien oder das Inhaltsverzeichnis scheinen nicht vorhanden zu sein!";
    }
var_dump ($ausgabe);
```


----------



## romacasa (27. März 2021)

Danke der Hilfe. Probiere es morgen aus. Danke vielmals.


----------



## romacasa (28. März 2021)

Ok. Ziel erreicht. Alles schön sortiert. Danke. Muss nun die Seite konstruieren.


----------



## romacasa (4. Juni 2021)

Hallo zusammen. Ich habe die Ausgabe des oben beschriebenen Posts so realisiert. Funktioniert eigentlich so, wie gewollt. Kann man diesen Code nicht optimieren, oder muss ich dies wirklich 26 mal schreiben? Hab da leider keine Idee. Ich hab es mit einer foreach-schleife versucht - ergab aber keinen Sinn und leere Seiten.

Dazu noch: Die HTML Elemente

```
<h2> A oder B, oder C etc </h2 >
<hr />
```
sollten in der Schleife dabei sein. Da denke ich nur, dass ich diese in eine Variable übernehmen muss, damit das Funktioniert. Richtig? Oder kann man eine Schleife bilden, die Elemente ausserhalb von PHP, wie den HTML-Code, unterdrückt, wenn er nicht gebraucht wird? Z.B. habe ich noch keinen Eintrag mit Y. Könnte aber einen existieren, daher soll er Code so sein, dass die Hinzufügung im Inhaltsverzeichnis auch das Y ausgibt.

Die Form:

A
____________

A_Eintrag 1
A_Eintrag 2

B
________________

etc.

Danke der Hilfe.



```
<!DOCTYPE html>
<html>
  <head>
    <title>Testseite für Ausgabe</title>
  </head>
  <body>
<h1>Inhaltsverzeichnis</h1>

<h2>A</h2>
<hr />

<?
If (array_key_exists('A', $ausgabe)) {
  
    foreach ($ausgabe['A'] as $key => $value) {
  
        ?>
        <br /><? echo($value); ?>
        <br /><? }
} else {
    echo('Nicht vorhanden');    //nur zu Testzwecke.......
}If (array_key_exists('B', $ausgabe)) {
  
    foreach ($ausgabe['B'] as $key => $value) {
  
        ?>
        <br /><? echo($value); ?>
        <br /><? }
} else {
    echo('Nicht vorhanden');    //nur zu Testzwecke.......
}If (array_key_exists('Y', $ausgabe)) {
  
    foreach ($ausgabe['Y'] as $key => $value) {
  
        ?>
        <br /><? echo($value); ?>
        <br /><? }
} else {
    echo('Nicht vorhanden');    //nur zu Testzwecke.......

..... usw
}?>
```


----------



## Sempervivum (4. Juni 2021)

Mit zwei verschachtelten Schleifen, etwa so:

```
foreach ($events as $key=>$eventlist) {
    echo '<h2>Anfangsbuchstabe ' . $key . '</h2>';
    foreach ($eventlist as $event) {
        echo $event . '<br>';
    }
}
```
(ungetestet)


----------



## romacasa (4. Juni 2021)

Wow, danke funktioniert. Danke. Wie kann ich den 2 Key des Mehrdimensionales Array in der selbigen Schleife auslesen? Diese Nummer muss dann in die URL, um mittels GET für den Player abgespielt werden. Dies Struktur im Array:

Array => Key => Key2 => Eintrag.
Beispie: Array ist $ausgabe[ A(Key1), 370_02(Key2),  Eintrag des Inhaltsverzeichnis.]

Es geht um den Key2. 

```
foreach ($ausgabe as $key=>$eventlist) {

    echo '<h2>' . $key . '</h2>';
    echo '<hr />';
    foreach ($eventlist as $event) {
        
           echo "<a href='more.php?file=" . urlencode($key2) . "'>" . basename($event) . "</a><br/>";
  
      
    }
}
```


----------



## Sempervivum (4. Juni 2021)

Auch das ist einfach:

```
foreach ($ausgabe as $key=>$eventlist) {

    echo '<h2>' . $key . '</h2>';
    echo '<hr />';
    foreach ($eventlist as $key2=>$event) {
      
           echo "<a href='more.php?file=" . urlencode($key2) . "'>" . basename($event) . "</a><br/>";
 
    
    }
}
```


----------



## romacasa (4. Juni 2021)

herzlichen dank.... Vielen dank.


----------



## romacasa (12. Juni 2021)

Hallo. Dank Eurer Hilfe hab ich einiges gelernt und konnte das Projekt zum laufen zu bringen. Es bedarf noch ein wenig an Feinheiten. bei Interesse: Verzeichnis der audiodateien.  Ich habe es noch nicht Modal gelöst. Es war mal wichtig, dass es funktioniert. Da das Verzeichnis sehr umfangreich ist, wäre noch die Idee gewesen, bei neu hinzugefügten Dateien eine Kennzeichnung zu erwirken, wie "NEW", die vielleicht um die 30 Tage aktiv  - am besten beim jeweiligen Besucher - bleibt. Habt Ihr eine Idee, wie ich dies bewältigen kann? Ist dies zu umfangreich oder eher einfach? Die Audiodateien haben als Datum nur Erstellung und Änderung. Diese sind unbrauchbar, das der Zeitstempel der Erstellung IMMER derselbe ist. Und die Änderung ist oft am gleichen Tag und zur selben Urzeit. Hängt wohl mit dem Export der Audios vom Tonmeister zusammen (z.B. 10 Spuren als einzelne Spuren abspeichern - gleichzeitig).

Ideen?

Danke


----------



## Sempervivum (12. Juni 2021)

Worauf soll sich denn das "new" und die 30 Tage beziehen? Auf den Zeitpunkt des Hochladens auf die Website? Dann müsste eigentlich filemtime zum Ziel führen. Oder auf den Zeitpunkt der Veranstaltung bzw. der Aufnahme? Dieser steht im Text und müsste daher ebenfalls verfügbar sein. Notfalls könnte man ihn aus dem Text parsen.


----------



## romacasa (13. Juni 2021)

Bezug auf dem Hochladen. Also, wenn eine neue Version hochgeladen wurde, sodass der Benutzer sieht, dass dieser Eintrag neu ist.


----------



## ByeBye 284669 (13. Juni 2021)

Dann sollte, wie Sempervivum schon schrieb, filemtime zum Ziel führen. Siehe PHP: filemtime - Manual


----------

