PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Array, datein random



puM4
23.10.2007, 13:15
Hallo
Ich habe ein Problem unswar würde ich gerne einen Ordnerinhalt auslesen dann aus dem Ordner eine zufällige Datei includen lassen aber das ganze drei mal aus dem gleichen ordner und es soll sich keine Datei wiederholen(es sind php datein)

Mein Aktueller Code sieht so aus


<?php

include sprintf("stuff/kaesten/%02d.php",rand(1,5));
include sprintf("stuff/kaesten/%02d.php",rand(1,5));
include sprintf("stuff/kaesten/%02d.php",rand(1,5));
?>

So nun bin ich dabei das ganze mit arrays zu machen stecke aber wie gesagt fest.


<?php
$datei = array();
if($handle = @opendir('stuff/kaesten'))
{
while($datei = readdir($handle))
{
if($datei != '.' AND $datei != '..')
{
$dateien[] = $datei;
sort($dateien);
}
}
sort($dateien);
}

?>


Hoffe auf schnelle antwort
mfg Sebastian Gafinen

DFYX
23.10.2007, 13:57
Willkommen im Forum. Mal schaun, ob ich das jetzt so auf Anhieb hinbekomm:


<?php
$datei = array();
if($handle = @opendir('stuff/kaesten'))
{
while($datei = readdir($handle))
{
if($datei != '.' AND $datei != '..')
{
$dateien[] = $datei;
}
}
for($i = 0; $i < 3; $i++)
{
$num = rand(0, count($dateien) - 1;
include 'stuff/kaesten/'.$dateien[$num];
array_splice($dateien, $num, 1);
}
}

?>

Nicht getestet, aber es sollte gehen.

puM4
23.10.2007, 14:06
danke ich habe es gestestet
leider klappt es nicht


das sit die Fehlermeldung

Parse error: parse error, unexpected ';' in C:\Programme\xampp\htdocs\xampp\websites\mayschoss\stuff\reba_test.php on line 14

eissceda
23.10.2007, 14:15
In Zeile 14 eine schließende Klammer vor den ;, danach sollte der Fehler behoben sein.

puM4
23.10.2007, 14:27
Danke nun gibts noch einen Fehler



Warning: main(kaesten/) [function.main]: failed to open stream: Permission denied in C:\Programme\xampp\htdocs\xampp\websites\mayschoss\stuff\reba_test.php on line 15

Warning: main() [function.include]: Failed opening 'kaesten/' for inclusion (include_path='.;C:\Programme\xampp\php\pear\') in C:\Programme\xampp\htdocs\xampp\websites\mayschoss\stuff\reba_test.php on line 15

EDIT://
und das problem das 2 gleiche auftauchen ist auch noch da

eissceda
23.10.2007, 14:34
Versuche es mal mit eckigen Klammern[] hinter dem $dateien in Zeile 16.
Wenn dir gesagt wird, das du ihm einen Array geben sollst dann musst du ihm auch einen Array geben.

Edit: Dabei, das zwei gleiche auftreten kann ich dir aktuell leider nicht helfen, da ich aktuell keinen Server zum testen zur Verfügung habe. Wenn du mir aber bis morgen Zeit gibst kann ich dir das so hinbiegen, das es Funktioniert.

puM4
23.10.2007, 14:35
danke das habe ich gerade geschafft zu lösen nun bleiben aber noch die 2 warnings und es müssen 3 unterschiedliche Kästen auftauchen hab mir auch schon überliegt wie das gehen könnte kann das aber nciht in php umsetzten

// EDIT:
Also alle Warnungen sind raus ;) nun muss nur noch das problem gelöst werden das nichts doppelt erscheinen darf

//Edit² :
ES KLAPPT *JUHHHHHHHU*

Danke für die hilfe , das Board gefällt mir ich glaub ich werde hier mal aktiv :)
p.s
ich lade die Seite nacher hoch das ihr sie euch angucken könnt wenn ihr wollt

Jesus_666
24.10.2007, 02:26
Nur so nebenbei; ich hätte es so gemacht: (Achtung, erfordert PHP 5!)


<?php
/** Holt N zufällige Dateien aus einm Verzeichnislisting
* Parameter:
* path - das zu durchsuchende Verzeichnis
* numFiles - die Anzahl der zu holenden Dateien
* Rückgabewert:
* Ein Array mit den Dateinamen oder
* FALSE, wenn zu wenige Dateien vorhanden sind
*/
function getRandomFiles($path, $numFiles)
{
$files = scandir($path);

if (count($files) < $numFiles)
return false;

shuffle($files);

for ($i = 0; $i < $numFiles; $i++)
{
$result[] = array_shift($files);
}

return $result;
}

// Ein Beispiel zum Testen
print_r(getRandomFiles('.', 3));
?>


Die Kombination shuffle() (http://de.php.net/manual/de/function.shuffle.php)/array_shift() (http://de.php.net/manual/de/function.array-shift.php) ist allgemein deutlich bequemer als die von DFYX gepostete for-Schleife und sie funktioniert auch mit PHP4. Der einzige PHP5-spezifische Kram bei mir ist scandir() (http://de.php.net/manual/de/function.scandir.php), welches aber auch durch den oberen Teil von DFYX' Code ersetzt werden kann.