2016-07-21 23 views
0

ich eine foreach-Funktion haben:Split foreach Ergebnisse in wieder verwendbare Variablen

foreach ($result as $result) { 
    echo "<a href='" . $result . "'>" . $result . "</a><br>"; 
} 

, die eine Liste wie folgt erzeugt:

[spacer]_[timespacer]_fiveseconds.wav 
[trudy]_[0x06DDD12A]_i.wav 
[trudy]_[0x06DDD12A]_get.wav 
[spacer]_[timespacer]_halfsecond.wav 
[spacer]_[timespacer]_onesecond.wav 

I explode & split Funktion versucht, aber diese gibt ständig eine ganze Liste von :

array 
array 

Was ich will ieve soll foreach $result eine Variable haben, die das Wort/den Namen zwischen dem ersten Satz von [] und einer anderen Variablen enthält, die den zweiten Satz von [] dann eine dritte Variable enthält, die alles zwischen dem letzten _ und .wav enthält. So wird es diese Variablen haben:

$result_classname = spacer 
$result_parent = timespacer 
$result_name = fiveseconds 
$result = [spacer]_[timespacer]_fiveseconds.wav 

Welche mir erlauben zu tun:

foreach ($result as $result) { 
    echo "<a class='" . $result_classname . "' href='" . $result . "'>" . $result_name . "</a><span>" . $result_parent . "</span><br>"; 
} 

Wie kann ich das erreichen?

foreach ($result as $result) { 

Verwenden Sie eine andere Variable:

Antwort

2

Zuerst Sie nicht die gleiche Variable in Ihrem foreach verwenden möchten

foreach ($result as $value) { 

Dann hier ist eine nicht regex Weg zu handhaben :

list($classname, $parent, $name) = explode('_', $value); 
$classname = trim($classname, '[]'); 
$parent = trim($parent, '[]'); 
$name  = pathinfo($name, PATHINFO_FILENAME); 
  • Explosion auf unterstreicht
  • [] Zeichen von jedem Ende
  • die Dateinamen trimmen, ohne extenstion

oder eine einfache regex:

preg_match('/\[([^\]]+)\]_\[([^\]]+)\]_([^.]+).*/', $value, $matches); 

Dann print_r($matches); verwenden, um zu sehen, welche zu verwenden ($matches[0] , etc.).

+0

Hey ich habe gerade deinen Code ausprobiert! Und es funktioniert teilweise. Ich bin mir sicher, dass ich etwas falsch mache. Ich habe Ihren Code in die 'foreach' und über das' echo' eingefügt. Nun wird der Name korrekt angezeigt, aber der Eltern- und Klassenname nicht. Ich werde den Code im Hauptartikel hochladen, wie es jetzt ist. So kann es besser verstanden werden als mein Kauderwelsch ;-) – purple11111

+0

Dummer Fehler meinerseits. Überprüfen Sie die neuen 'trim()' Zeilen. – AbraCadaver

+0

Ich ging für das Preg-Match, das perfekt funktioniert. Ich habe auch die andere Methode versucht, aber der Link gab mir 'array' anstelle des Links. Ich möchte Ihnen dafür danken, dass Sie Ihre erste Antwort wiederholt haben, und natürlich, dass Sie mir bei der Lösung dieses Problems geholfen haben. Vielen Dank! – purple11111