PHP 重命名和串联添加额外的数字
PHP rename and concatenation adds extra numbers
我有以下代码,其操作如下:
选项 1 使用随机字符串重命名文件夹中的文件
选项 2 以增量方式重命名文件。
问题是由于某种原因循环运行了两次,给我留下了从大于 0 开始的数字。
有人能注意到逻辑有什么问题吗?
if ($handle = opendir('../images/IL')) {
$nameCount = 0;
while (false !== ($fileName = readdir($handle))) {
$nameCount++;
//opt 1 for random, opt 2 numeric incremental naming
$opt = 2;
if( inString('.jpg', $fileName) == 'true') {
if($opt == 1) {
$newName = '';
$newName = genword( 8, 5 );
rename('../images/IL/'.$fileName, '../images/IL/'.$newName.'.jpg');
}
else if ( $opt == 2 ) {
rename('../images/IL/'.$fileName, '../images/IL/image '.$nameCount.'.jpg');
}
}
closedir($handle);
}
你做
$nameCount = 0;
循环之前和循环开始时
$nameCount++;
在循环的开头。 因此,文件最小编号为1。
$nameCount
在 while 循环的 每 次迭代中递增。这意味着 $nameCount
对于名称不包含“.jpg”的文件递增,例如blah.gif 这包括始终有 2 个的目录:.
当前目录和 ..
父目录。
所以,鉴于 $nameCount
立即增加,它的有效初始值为 1。然后为当前目录和父目录添加 2。加上不包含子字符串 .jpg
的任何其他文件或目录 - 这就是为什么您发现重命名的文件没有预期的顺序。
缩进不当,尤其是 $opt
if/else 处理,可能是造成这种误解的原因。试试这个:
<?php
$img_dir = '../images/IL/';
function inString($needle, $haystack)
{
if (strstr($haystack, $needle) != FALSE)
return 'true';
return 'false';
}
if ($handle = opendir($img_dir)) {
$nameCount = 0;
while (false !== ($fileName = readdir($handle))) {
//opt 1 for random, opt 2 numeric incremental naming
$opt = 2;
if (inString('.jpg', $fileName) == 'true') {
if ($opt == 1) {
$newName = '';
$newName = genword( 8, 5 );
rename($img_dir.$fileName, $img_dir.$newName.'.jpg');
}
else if ($opt == 2) {
$nameCount++;
rename($img_dir.$fileName, $img_dir.$nameCount.'.jpg');
}
}
}
closedir($handle);
}
请注意 $nameCount
现在仅在重命名文件时递增。
我有以下代码,其操作如下: 选项 1 使用随机字符串重命名文件夹中的文件 选项 2 以增量方式重命名文件。 问题是由于某种原因循环运行了两次,给我留下了从大于 0 开始的数字。 有人能注意到逻辑有什么问题吗?
if ($handle = opendir('../images/IL')) {
$nameCount = 0;
while (false !== ($fileName = readdir($handle))) {
$nameCount++;
//opt 1 for random, opt 2 numeric incremental naming
$opt = 2;
if( inString('.jpg', $fileName) == 'true') {
if($opt == 1) {
$newName = '';
$newName = genword( 8, 5 );
rename('../images/IL/'.$fileName, '../images/IL/'.$newName.'.jpg');
}
else if ( $opt == 2 ) {
rename('../images/IL/'.$fileName, '../images/IL/image '.$nameCount.'.jpg');
}
}
closedir($handle);
}
你做
$nameCount = 0;
循环之前和循环开始时
$nameCount++;
在循环的开头。 因此,文件最小编号为1。
$nameCount
在 while 循环的 每 次迭代中递增。这意味着 $nameCount
对于名称不包含“.jpg”的文件递增,例如blah.gif 这包括始终有 2 个的目录:.
当前目录和 ..
父目录。
所以,鉴于 $nameCount
立即增加,它的有效初始值为 1。然后为当前目录和父目录添加 2。加上不包含子字符串 .jpg
的任何其他文件或目录 - 这就是为什么您发现重命名的文件没有预期的顺序。
缩进不当,尤其是 $opt
if/else 处理,可能是造成这种误解的原因。试试这个:
<?php
$img_dir = '../images/IL/';
function inString($needle, $haystack)
{
if (strstr($haystack, $needle) != FALSE)
return 'true';
return 'false';
}
if ($handle = opendir($img_dir)) {
$nameCount = 0;
while (false !== ($fileName = readdir($handle))) {
//opt 1 for random, opt 2 numeric incremental naming
$opt = 2;
if (inString('.jpg', $fileName) == 'true') {
if ($opt == 1) {
$newName = '';
$newName = genword( 8, 5 );
rename($img_dir.$fileName, $img_dir.$newName.'.jpg');
}
else if ($opt == 2) {
$nameCount++;
rename($img_dir.$fileName, $img_dir.$nameCount.'.jpg');
}
}
}
closedir($handle);
}
请注意 $nameCount
现在仅在重命名文件时递增。