[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
array-Einträge filtern - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Muotoilija
Beiträge: 146
Registriert: 20. Mär 2007, 10:08
Wohnort: Tampere/ Finnland
Kontaktdaten: Website

array-Einträge filtern

28. Feb 2010, 15:08

Hei,

hab ein kleines PHP-Problem.

In einem Array sind Dateinamen gespeichert mit unterschiedlichen Dateiendungen:

z.B.
$var = array ( 'datei-1.jpg', 'datei-2.pdf', 'datei-3.pdf', 'datei-4.doc', 'datei-5.jpg' );

Nun sollen alle JPGs herausgefiltert und in einem neuen Array gespeichert werden.

Wer kann mir helfen?!
VG Chris

Benutzeravatar
timo.huber
Beiträge: 305
Registriert: 22. Dez 2009, 13:26

28. Feb 2010, 17:22

Hoi,

Code: Alles auswählen

<?php
$var = array ( 'datei-1.jpg', 'datei-2.pdf', 'datei-3.pdf', 'datei-4.doc', 'datei-5.jpg' ); 
$varNeu = array();

foreach ($var as $eintrag)
{
	if (substr($eintrag, -4, 4) == '.jpg')
		$varNeu[] = $eintrag;
}


echo '<pre>';
print_r($varNeu);
echo '</pre>';


echo '<hr />';

function call($eintrag)
{
	if (substr($eintrag, -4, 4) == '.jpg')
		return true;
	else
		return false;
}

$varNeu = array_filter($var, 'call');
echo '<pre>';
print_r($varNeu);
echo '</pre>';
?>

es gibt noch viele weitere Möglichkeiten ;)


mfg
$glaskugel = new rex_glaskugel();
$loesung = $glaskugel->getLoesung("problem");
foreach ($loesung as $l)
{
echo $l;
}

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

28. Feb 2010, 19:01

timo.huber hat geschrieben: es gibt noch viele weitere Möglichkeiten ;)
Vielleicht Variante2 in kurz:

Code: Alles auswählen

<?php
function jpg_filter($file)
{
  return preg_match('/\.jpg$/',$file);
}

$var = array ('datei-1.jpg', 'datei-2.pdf', 'datei-3.pdf', 'datei-4.doc', 'datei-5.jpg' );

$jpgFiles = array_filter($var,'jpg_filter');

print_r($jpgFiles);
?>
Nicht als "Besserwiss" gedacht, sondern einfach nur weil's Spaß macht :wink:

Gruß

Peter

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

28. Feb 2010, 19:50

hi
ich muß mich mal einklinken ;)

was ist eigendlich der unterschied zwischen
print und print_r

kapier ich net... ist da überhaupt ein unterschied...
nur mal so weil ich keine ahnung habe davon evtl. hilft es mir ja auch ma zu verstehen wie das mit dem php so geht ;)

gruß richy
REXvideo Videotutorials für Redaxo www.REXvideo.de
Webseite www.on-laing.de smokezig.de www.smokezig.de

Benutzeravatar
timo.huber
Beiträge: 305
Registriert: 22. Dez 2009, 13:26

28. Feb 2010, 20:56

Hoi Richard,

also print ist eine alternative zu echo. print gibt aber einen Wert zurück (1).

print_r wird meistens zum debuggen bebutzt. Man kann sich damit z.b. Einträge von Arrays sehr schön dargestellt ausgeben lassen und sich einen Überblick über die Inhalte machen.


mfg
$glaskugel = new rex_glaskugel();
$loesung = $glaskugel->getLoesung("problem");
foreach ($loesung as $l)
{
echo $l;
}

Muotoilija
Beiträge: 146
Registriert: 20. Mär 2007, 10:08
Wohnort: Tampere/ Finnland
Kontaktdaten: Website

jpg und JPG

28. Feb 2010, 20:58

Hei, vielen Dank für die Antworten!

Ich habe gleich die erste lösung genommen und sie funktioniert soweit.

Nun sollen aber .jpg und .JPG (also einmal gross und einmal klein geschrieben) gleich behandelt werden.

In einem Ordner auf dem Webserver liegen Dateien unterschiedlichen Formats, also .jpg, .JPG, .doc, .pdf usw.
Das Skript soll sich alle .jpg und .JPG aus diesem Ordner herausangeln und daraus im Frontend eine Bildergalerie erzeugen.

Wenn ich .jpg einsetze, klappts, aber wenn ich .jpg durch .JPG ersetze, werden weder .jpg noch .JPG-Dateien ausgegeben.

Muotoilija
Beiträge: 146
Registriert: 20. Mär 2007, 10:08
Wohnort: Tampere/ Finnland
Kontaktdaten: Website

28. Feb 2010, 21:10

... oder kann PHP .JPG-Dateien auf dem Webserver in .jpg-Dateien umwandeln?!

Das wäre vielleicht das einfachste oder?

Wer kann mir weiterhelfen?

VG Chris

Benutzeravatar
Richard.Laing
Beiträge: 2105
Registriert: 28. Aug 2005, 00:55
Wohnort: Brühl / Rheinland
Kontaktdaten: Website

28. Feb 2010, 21:16

hi timo
das mit print und echo war mir klar ;)

aber print_r dafür danke ich dir auch mal wieder gut zu wissen ;)

gruß richy
REXvideo Videotutorials für Redaxo www.REXvideo.de
Webseite www.on-laing.de smokezig.de www.smokezig.de

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

28. Feb 2010, 22:12

Dann vielleicht doch besser die Variante mit regulärem Ausduck:

Code: Alles auswählen

<?php
function jpg_filter($file)
{
  return preg_match('/\.jpg$/i',$file);
}

$var = array ('datei-1.jpg', 'datei-2.pdf', 'datei-3.pdf', 'datei-4.doc', 'datei-5.JPG' );

$jpgFiles = array_filter($var,'jpg_filter');

print_r($jpgFiles);
?> 
Entgegen der Variante oben, werden durch hinzufügen des '/\.jpg$/i' Groß- und Kleinschreibung ignoriert. Beide Schreibweisen .jpg und .JPG werden also in das neue Array zurück gegeben.

Gruß

Peter

Muotoilija
Beiträge: 146
Registriert: 20. Mär 2007, 10:08
Wohnort: Tampere/ Finnland
Kontaktdaten: Website

28. Feb 2010, 22:16

Ok, den Fehler habe ich jetzt selbst gefunden, dass es mit JPG (gross geschrieben) nicht klappte...

ich habs jetzt einfach so gemacht:

Code: Alles auswählen

$jpg = array(); 

foreach ($ggFiles as $eintrag){ 
   			
  if (substr($eintrag, -4, 4) == '.JPG')
    $jpg[] = $eintrag; 

  if (substr($eintrag, -4, 4) == '.jpg') 
    $jpg[] = $eintrag;
		
}
Sieht für einen PHP-Profi vielleicht etwas unelegant aus, aber es funzt...

Peter, danke nochmal für deine Antwort! ich war hier gerade am schreiben als deine Antwort kam! :D

Benutzeravatar
timo.huber
Beiträge: 305
Registriert: 22. Dez 2009, 13:26

1. Mär 2010, 09:58

Hoi,

das funktioniert natürlich.
Nur als Anmerkung und weitere Lösung (neben deiner und der von Peter) kannst du auch einfach die Eingabe (Dateiname) in Kleinbuchstaben umwandeln.

http://de2.php.net/strtolower

Damit hast du nur eine (if) Überprüfung.

mfg
$glaskugel = new rex_glaskugel();
$loesung = $glaskugel->getLoesung("problem");
foreach ($loesung as $l)
{
echo $l;
}

Muotoilija
Beiträge: 146
Registriert: 20. Mär 2007, 10:08
Wohnort: Tampere/ Finnland
Kontaktdaten: Website

1. Mär 2010, 13:32

Hei, vielen Dank für eure Hilfe!!

Ich belasse es erstmal bei meiner Lösung. Bin schon froh, dass es endlich läuft!
Beim nächsten Mal mache ich es besser... :D

VG Chris

Zurück zu „Sonstiges“