mehrdimensionales Array + foreach

GN911

Erfahrenes Mitglied
Hallo,

ich verwende bisher folgende Funktion die je nach Dateityp ein entsprechendes Icon setzt.

PHP:
 function ShowFileExtensions($file) {
     $info = pathinfo($file);
     $fileExtensions = strtolower(empty($info['extension']) ? '' : $info['extension']);

     switch($fileExtensions) {
         case 'jpg': return 'but_jpg.gif';
         break;
         .......
         default: return 'but_unknown.gif';
         break;
     }
 }
So rufe ich die funktion innerhalb des Scriptes auf: <img src=\"". ShowFileExtensions($file) ."

Nun wollte ich die ganze Sache erweitern, scheiter aber gerade dran

PHP:
 function ShowFileExtensions($file) {
     $info = pathinfo($file);
     $fileExtensions = strtolower(empty($info['extension']) ? '' : $info['extension']);

     global $mimeIcon, $mimeTyp, $mimeDescription;
     $mimeTypes = array();
     $mimeTypes = array(
                           "jpg" => array("mimeIcon" => "but_jpg.gif", "mimeTyp" => "image/jpeg", "mimeDescription" => "JPEG-Bild"),
                           "txt" => array("mimeIcon" => "but_txt.gif", "mimeTyp" => "text/plain", "mimeDescription" => "Textdokument")
                         );

     foreach($mimeTypes as $key => $value) {
         if ($key != $fileExtensions) {
             $mimeIcon = "but_unknown.gif";
         }
         else {
             foreach($value as $key2 => $value2) {
                 $mimeIcon = $key2['mimeIcon'];
                 $mimeTyp = $key2['mimeTyp'];
                 $mimeDescription = $key2['mimeDescription'];
             }
         }
     }
 }
Wie rufe ich die Sache auf, den mit: auf: <img src=\"". $mimeIcon ." wird nichts angezeigt

Gruß GN911
 
Nacht,

viel einfacher wäre doch folgendes, nicht?

PHP:
<?php

$extension = array(
  'jpg' => 'but_jpg.jpg',
  'png' => 'but_png.jpg'
)

$meinFile = '/home/marc/testbude/50/test.jpg';

/* vllt folgendes in extra Funktion */
$temp = pathinfo( $meinFile);
$ext = $temp[ 'extension' ];

print '<img href="' . $extension[ $ext ] . '" />';

?>

Grüße,
MArc
 
Hi!

Mir fehlen die fachlichen Begriffe: Du kannst Dich einfach mit den Keys durch ein mehrdimensionales Array hangeln:
PHP:
$mimeIcon = $mimeTypes[$key]['mimeIcon'];
Wenn ich Dich bzw. Deine Aufgabe recht verstehe, benötigst Du aber gar nicht die foreach-Schleife:
PHP:
function ShowFileExtensions($file) {
    $info = pathinfo($file);
    $fileExtensions = strtolower(empty($info['extension']) ? '' : $info['extension']);

    global $mimeIcon, $mimeTyp, $mimeDescription;
    $mimeTypes = array(
        "jpg" => array("mimeIcon" => "but_jpg.gif", "mimeTyp" => "image/jpeg", "mimeDescription" => "JPEG-Bild"),
        "txt" => array("mimeIcon" => "but_txt.gif", "mimeTyp" => "text/plain", "mimeDescription" => "Textdokument")
    );
    if ($mimeTypes[$fileExtensions]) {
        $mimeIcon = $mimeTypes[$fileExtensions]['mimeIcon'];
        $mimeTyp = $mimeTypes[$fileExtensions]['mimeTyp'];
        $mimeDescription = $mimeTypes[$fileExtensions]['mimeDescription'];
    } else { 
        $mimeIcon = "but_unknown.gif";
    }
}

Liebe Grüße,
Mark.
 
Hi Mark,

habe das mal jetzt so eingebaut. Wenn ich jetzt aber im Script versuche die Information so ShowFileExtensions($file[$mimeIcon]); heraus zu ziehen, kommt immer nur but_unknown.gif.
Egal ob ich $mimeIcon, $mimeTyp oder $mimeDescription rein schreibe.


Gruß
 
Hi!

Du hast ja auch die globalen Variablen gesetzt, d.h. Du kannst diese direkt ansprechen: "echo $mimeIcon;"...
Alternativ könntest Du von der Funktion ein Array zurückgeben lassen und darin auf das gewünschte "Feld" zugreifen:
PHP:
function ShowFileExtensions($file) {
    $info = pathinfo($file);
    $fileExtensions = strtolower(empty($info['extension']) ? '' : $info['extension']);

    $mimeTypes = array(
        "jpg" => array("mimeIcon" => "but_jpg.gif", "mimeTyp" => "image/jpeg", "mimeDescription" => "JPEG-Bild"),
        "txt" => array("mimeIcon" => "but_txt.gif", "mimeTyp" => "text/plain", "mimeDescription" => "Textdokument"),
        "unknown" => array("mimeIcon" => "but_unknown.gif", "mimeTyp" => "", "mimeDescription" => "")
    );
    
    if (!$mimeTypes[$fileExtensions]) {
        $fileExtensions = 'unknown';
    }
    
    return $mimeTypes[$fileExtensions];
}

$mime = ShowFileExtensions("test.jpg");
echo $mime['mimeIcon'] . '<br />';
$mime = ShowFileExtensions("test.txt");
echo $mime['mimeIcon'] . '<br />';
$mime = ShowFileExtensions("test.gif");
echo $mime['mimeIcon'] . '<br />';

Liebe Grüße,
Mark.
 
Woah... Da muss ich mal überlegen... Vielleicht geht das "tricksig".

Vielleicht kann man in seine magic.mime vom Apache schreiben:

Code:
gif image/gif Bilddatei

PHP:
function MimeIcon($file) {
	$a = explode(" ", mime_content_type($file));
	$a = array_merge($a, glob("but_" . pathinfo($file, 4) . "*"));
	return $a;
}

Jetz ist der Bildname allerdings am Ende. Geht sowas? Kann mir einer in meinen Gedanken folgen? ;)

btw: Ja, mime_content_type ist deprecated aber was solls ^ ^
 
Zurück