如何查看数组中的值?

时间:2011-09-04 14:00:41

标签: php arrays

我正在尝试在目录中创建一个文件列表,包括子目录中的文件列表,显示它们的完整路径,文件名和扩展名。任何指导都将不胜感激。

经过大量阅读后,我尝试了几件事,这是我发现并尝试的最新内容,但没有任何乐趣,因为现在我只是在寻找浏览器来显示上述信息。

$dir = '../test/images/';
function getFileList($dir, $recurse=false)
{
    // array to hold return value
    $retval = array();
    // add trailing slash if missing
    if(substr($dir, -1) != "/") $dir .= "/";
    // open pointer to directory and read list of files
    $d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
    while(false !== ($entry = $d->read())) {
        // skip hidden files
        if($entry[0] == ".") continue;
        if(is_dir("$dir$entry")) {
            $retval[] = array(
                "name" => "$dir$entry/",
                "type" => filetype("$dir$entry"),
                "size" => 0,
                "lastmod" => filemtime("$dir$entry")
            );
            if($recurse && is_readable("$dir$entry/")) {
                $retval = array_merge($retval, getFileList("$dir$entry/", true));
            }
            } elseif(is_readable("$dir$entry")) {
            $retval[] = array(
                "name" => "$dir$entry",
                "type" => mime_content_type("$dir$entry"),
                "size" => filesize("$dir$entry"),
                "lastmod" => filemtime("$dir$entry")
            );
        }
    }
    $d->close();
    return $retval;
}
print_r($retval);

我的最终目标是创建一些执行时将在目录中查找的php,在新目录中创建具有相同名称的子目录(以及其中的所有子目录)(因此/ test / album /将创建为/现场/相册/)。然后调整每个原始目录中包含的所有图像的大小,并将它们保存到相关的新目录中。我很欣赏这很多,毫无疑问,我会继续提出许多问题,但会在以后保存这些问题。

4 个答案:

答案 0 :(得分:3)

简单快捷:

echo '<pre>';
print_r($array); // where $array == array();
echo '</pre>';

答案 1 :(得分:3)

这是我为我的网站写的类似脚本:

<?php
$baseDir = '/images/test';
$newDir = '/images/live/';
$returnFiles = array();

function getDirectory($path, $level, $newDir, $baseDir, &$returnFiles) {
    if(substr($path, -1) != DIRECTORY_SEPARATOR) {
        $path = $path . DIRECTORY_SEPARATOR;
    }
    if(substr($newDir, -1) != DIRECTORY_SEPARATOR) {
        $newDir = $newDir . DIRECTORY_SEPARATOR;
    }
    if(substr($baseDir, -1) != DIRECTORY_SEPARATOR) {
        $baseDir = $baseDir . DIRECTORY_SEPARATOR;
    }
    $dh = opendir( $path );
    if(!$dh) {
        return;
    }
    while( false !== ( $file = readdir( $dh ) ) ) {
        if($file == '.' || $file == '..') {
            continue;
        }
        $ident = str_repeat("\t", $level);

        if(is_file($path . $file)) {
            if(substr(mime_content_type($path . $file), 0, 5) == 'image') {
                $returnFiles[] = saveImage($path . $file, $newDir, $baseDir);
            }
        }
        else if(is_dir($path . $file)) {
            getDirectory($path . $file . DIRECTORY_SEPARATOR, $level+1, $newDir, $baseDir, $returnFiles);
        }
    }
    closedir( $dh );
} 

function saveImage($image, $newDir, $baseDir) {
    $current = dirname($image) . DIRECTORY_SEPARATOR;
    $path = str_replace($baseDir, $newDir, $current);
    if(!is_dir($path)) {
        mkdir($path, 0777, TRUE);
    }
    $oldImage = array(
        "name" => $image,
        "type" => mime_content_type($image),
        "size" => filesize($image),
        "lastmod" => filemtime($image)
    );
    // conver image
    convertImage($image, $path);    
    $image = $path . basename($image);
    $newImage = array(
        "name" => $image,
        "type" => mime_content_type($image),
        "size" => filesize($image),
        "lastmod" => filemtime($image)
    );
    return array('old' => $oldImage, 'new' => $newImage);
}

function convertImage($image, $folder) {
    // do what you need to do to convert/resize etc..
    // for demo purpose I simply copy the image.
    copy($image, $folder . basename($image));
}

getDirectory($baseDir, 0, $newDir, $baseDir, $returnFiles);
print_r($returnFiles);

答案 2 :(得分:1)

回答你原来的问题,我发现使用var_dump($ array)确实有助于说明传递的数组结构,特别是多维。 Pus它为您提供了在您进步时可能有用的数据类型。

答案 3 :(得分:1)

以下是我在Ubuntu Forums处获取的一些代码,其中显示了给定路径中的所有目录及其子目录。

function recurse($path)
{
    foreach(glob($path.'/*',GLOB_ONLYDIR) as $myDirectory)
    {
        // change this to whatever you need to do
        echo "Directory : $myDirectory<br>\n";

        // but keep this line
        recurse($myDirectory);
    }
}

这应该让你开始尝试做的事情。 您可能希望更改功能的名称以便清晰。