请为初学者解释这个php substr代码

时间:2013-07-10 14:09:22

标签: php

<?php
$imgdir = 'img/';
$allowed_types = array('png','jpg','jpeg','gif'); //Allowed types of files
$dimg = opendir($imgdir);//Open directory
while($imgfile = readdir($dimg))
{
//please explain this part!!
if( in_array(strtolower(substr($imgfile,-3)),$allowed_types) OR
    in_array(strtolower(substr($imgfile,-4)),$allowed_types) )
{$a_img[] = $imgfile;}
}

$totimg = count($a_img);
for($x=0; $x < $totimg; $x++){echo "<li><img src='" . $imgdir . $a_img[$x] . "'/></li>"
;}?>

我明白,这就像babysteps,但我的问题是:我阅读了php手册,但我真的不明白为什么substr部分就是这样!请帮忙!谢谢!

3 个答案:

答案 0 :(得分:2)

检查文件名的最后3个字符,然后检查文件名的最后4个字符,以获取扩展名,并查看它是否在允许类型数组中。

然而,使用pathinfo()可能会更好。 http://php.net/manual/en/function.pathinfo.php

$path_parts = pathinfo($imgfile);
if( in_array(strtolower($path_parts['extension']),$allowed_types) ) {
    $a_img[] = $imgfile;
}

答案 1 :(得分:0)

substr($imgfile,-3);等于substr($imgfile, strlen($imgfile)-4);

这意味着您只收到字符串的最后3个字符。 在这种情况下,作者首先检查最后3个字符,然后检查最后4个字符,以查看它是否是允许的扩展名。

有关详细信息,请再次检查文档:string substr ( string $string , int $start [, int $length ] )

答案 2 :(得分:0)

让我用婴儿语言向你解释:D

substr有两个参数,一个字符串和一个数字。字符串是文本名称等文本或字符,数字是您想要的字符数。

如果数字是正数,那么它将从左侧获取字符,如果数字是负数,那么它将从右侧获取。在您的代码中:

substr($imgfile,-3)  // takes three characters from left

表示,取图像文件名的最后三个字符,即文件的扩展名,

substr($imgfile,-4)  // takes four characters from right side

表示最后四个字符。

在允许的类型数组中:

$allowed_types = array('png','jpg','jpeg','gif');

您有三个字符扩展名和一个四个字符扩展名,因此这两个substr用于这些目的。

我希望我用简单的话语为你解释。

谢谢