Bir dizin ve oto oto görüntü dosya değeri olarak doldurun

4 Cevap php

Bu gibi (final) bir şey istiyorum:

<?php
//named as config.php
$fn[0]["long"] = "file name";   $fn[0]["short"] = "file-name.txt";  
$fn[1]["long"] = "file name 1"; $fn[1]["short"] = "file-name_1.txt";
?>

? Ben istiyorum ki ne:

1. $fn[0], $fn[1], etc.., as auto increasing
2. "file-name.txt", "file-name_1.txt", etc.., as file name from a directory, i want it auto insert.
3. "file name", "file name 1", etc.., is auto split from "file-name.txt", "file-name_1.txt", etc..,

ve yukarıdaki config.php başka bir dosyada, örneğin gerekli

<? //named as form.php
include "config.php";
for($tint = 0;isset($text_index[$tint]);$tint++)
{
if($allok === TRUE && $tint === $index) echo("<option VALUE=\"" . $text_index[$tint]["short"] . "\" SELECTED>" . $text_index[$tint]["long"] . "</option>\n");
else echo("<option VALUE=\"" . $text_index[$tint]["short"] . "\">" . $text_index[$tint]["long"] . "</option>\n");
} ?>

so i try to search and put php code and hope it can handling at all : e.g.

<?php
$path = ".";
$dh = opendir($path);
//$i=0; 
$i= 1;
while (($file = readdir($dh)) !== false) {
if($file != "." && $file != "..") {
echo "\$fn[$i]['short'] = '$file'; $fn[$i]['long'] = '$file(splited)';<br />"; // Test 
       $i++;
}
}
closedir($dh);
?>

ama ben yanılıyorum, çıkış örneğin, i istediğiniz benzer değil

$fn[0]['short'] = 'file-name.txt'; ['long'] = 'file-name.txt'; //<--not splitted
$fn[1]['short'] = 'file-name_1.txt'; ['long'] = 'file-name_1.txt'; //<--not splitted

Ben biraz bu yüzden kodu daha artırmak için nasıl bilmiyorum php ile bilinen duyuyorum, çünkü senin iyi bir ipucu adamlar, bana lütfen yardımcı olabilir vardır

4 Cevap

New answer after OP edited his question

Düzenlenen soru, ben dinamik option value için belirli bir dizinde bulunan dosyaları ile bir HTML web sayfasında bir SelectBox elemanı doldurmak istiyorum anlıyorum. Değerleri çizgi ile bölünmüş olması gerekiyordu, altını ve sağlamak için numara option name, örneğin

Directory with Files    >    SelectBox Options
filename1.txt           >    value: filename1.txt, text: Filename 1
file_name2.txt          >    value: filename1.txt, text: File Name 2
file-name3.txt          >    value: filename1.txt, text: File Name 3

Ben benim diğer cevap verdi kodundan dayanarak, bu gibi DirectoryIterator ile elde edebiliriz:

$config = array();
$dir    = new DirectoryIterator('.');
foreach($dir as $item) {
    if($item->isFile()) {
        $fileName = $item->getFilename();
        // turn dashes and underscores to spaces
        $longFileName = str_replace(array('-', '_'), ' ', $fileName);
        // prefix numbers with space
        $longFileName = preg_replace('/(\d+)/', ' $1', $fileName);
        // add to array
        $config[] = array('short' => $filename,
                          'long'  => $longFilename);
    }
} 

Bir dizindeki dosya adları benzersiz olduğundan Ancak, aynı zamanda bir dizi olarak kullanabilirsiniz:

$config[$filename] => $longFilename;

config dizi oluştururken. Kısa dosya adı daha sonra dizinin anahtarı oluşturacak ve sonra bu gibi selectbox inşa edebilirsiniz:

foreach($config as $short => $long)
{
    printf( '<option value="%s">%s</option>' , $short, $long);
}

Örneğin, selectbox seçeneklerini oluştururken Alternatif olarak, sadece uzun dosya adları dönüşüm dosya bir dizi oluşturmak ve yapılacak yineleyici kullanın Yukarıdaki foreach gözüne tahsis edilmiştir. Aslında, tüm selectbox yerine ilk dizi binanın yineleyici itibaren hakkını, örneğin inşa olabilir

$dir = new DirectoryIterator('.');
foreach($dir as $item) {
    if($item->isFile()) {
        $fileName = $item->getFilename();
        $longFileName = str_replace(array('-', '_'), ' ', $fileName);
        $longFileName = preg_replace('/(\d+)/', ' $1', $fileName);
        printf( '<option value="%s">%s</option>' , $fileName, $longFileName);
    }
} 

O Yorum yok arıyorum ne umuyoruz. Ben kuvvetle başlıklı bölümde bakmak zorunda önermek Language Reference in the PHP Manual hiçbir ya kadar PHP ile çok az deneyimi var eğer. Ücretsiz bir online kitap http://www.tuxradar.com/practicalphp Orada da

Önlemek için ise durumun '..' sonucu görünmesini olarak kullanın.

if($file != "." && $file != "..")

Değişim

if($file != "." ) {

karşı

if($file != "." and $file !== "..") {

ve istediğiniz davranışı olsun.

If you read all the files from a linux environment you always get . and .. as files, which represent the current direckarşıry (.) and the parent direckarşıry (..). In your code you only ignore '.', while you also want karşı ignore '..'.

Edit: If you want karşı print out what you wrote change the code in the inner loop karşı this:

if($file != "." ) {
  echo "\$fn[\$i]['long'] = '$file'<br />"; // Test
    $i++;
}

If you want karşı fill an array called $fn:

if($file != "." ) {
  $fn[]['long'] = $file;
}

(You can remove the $i, because php aukarşı increments arrays). Make sure you initialize $fn before the while loop: $fn = array();

Aşağıdaki fonksiyonları bir göz atın:

  • glob - pathnames Bir desen eşleştirme bul
  • scandir - Belirtilen dizindeki dosyaları listeler and dizinleri
  • DirectoryIterator - dosya sistemi dizinleri içeriğini görüntülemek için basit bir arayüz sağlar

Yani, DirectoryIterator ile sadece yapardın:

$dir = new DirectoryIterator('.');
foreach($dir as $item) {
    if($item->isFile()) {
        echo $file;
    }
} 

$ Dir her $ ürün, SplFileInfo örneği ve kullanışlı diğer fonksiyonları bir dizi erişim sağlar nasıl dikkat edin, örneğin isFile().

Özyinelemeli dizin kastetmek yapıyor aynı derecede kolaydır. Sadece bir RecursiveIteratorIterator ile RecursiveDirectoryIterator kullanın ve mutlaka:

$dir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));
foreach($dir as $item) {
    echo $file;
}


NOTE Ben senin soru aşağıdaki satırı demek ne anlamıyorum korkuyorum:

echo "$fn[$i]['long'] = '$file'<br />"; // Test

Ancak yukarıda verilen fonksiyonları ve örnek kod ile, size hiç dizinleri içindeki dosyaları ile yapmak istediği her şeyi yapmak gerekir.