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

Jan-Frederik Stieler

Monsterator
Moderator
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.
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
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

Grünschnabel
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:
<?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.
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
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:
Code:
$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

Grünschnabel
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
Code:
<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.


HTML:
<!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
}?>
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
Mit zwei verschachtelten Schleifen, etwa so:
Code:
foreach ($events as $key=>$eventlist) {
    echo '<h2>Anfangsbuchstabe ' . $key . '</h2>';
    foreach ($eventlist as $event) {
        echo $event . '<br>';
    }
}
(ungetestet)
 
Zuletzt bearbeitet:

romacasa

Grünschnabel
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.
Code:
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

Erfahrenes Mitglied
Auch das ist einfach:
Code:
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/>";
 
    
    }
}