我有一个包含不同行的 CSV 文件:
;0;1;0;4;5;M;468468;A1101;00900;1; 0;4;5;M;468468;A1108;0090
例如,在照片文件夹中,第一个视图的命名格式必须为“A1101_0090-1.JPG”。
我写了一段代码,它可以让你做两件事:
csv 文件和照片文件夹中存在的图像的名称以及视图数
照片文件夹中但不在 csv 文件中或被错误重命名的图像的名称。
我的脚本可以工作,但是当我放置一个包含超过 5000 张照片的大照片文件夹时,处理时间非常长......我该如何改进我的代码?
<?php
echo '<pre>';
$dataImage = [];
$dataImageTmp = [];
$path = $_POST['path'];
$photos = scandir($path);
$photos = array_map('strtoupper', $photos);
if (($handle = fopen("../RC_PRODUCT_HUB.csv", "r")) !== FALSE) {
$firstLine = true;
while (($data = fgetcsv($handle, 9000000, ";")) !== FALSE){
if (!$firstLine){
if ($data[0] != null) {
$countImage = count(glob($path . $data[6] . '_' . $data[7] . '*.*'));
for ($i = 0; $i <= $countImage; ++$i) {
if ((file_exists($fileName = $path.$data[6].'_'.$data[7].'-'.$i.'.JPG'))){
if (!in_array($fileName, $dataImage)){
$dataImage[$data[6] . '_' . $data[7]]['file'][$i] = $fileName;
$fileName = str_replace($path, '', $fileName);
if (!in_array($fileName, $dataImageTmp)){
$dataImageTmp[] = $fileName;
}
}
$dataImage[$data[6] . '_' . $data[7]]['TOTAL'] = $countImage;
}
}
}
}
$firstLine = false;
}
//FIRST PART
echo count($dataImage)." refs founds.<br>";
print_r($dataImage).'<br>';
//SECOND PART
$dataImageTmp = array_map('strtoupper', $dataImageTmp);
$resultat = array_diff($photos, $dataImageTmp);
$element = '.';
unset($resultat[array_search($element, $resultat)]);
$element2 = '..';
unset($resultat[array_search($element2, $resultat)]);
echo count($resultat)." photos found.<br>";
foreach ($resultat as $result) {
echo ($result) . '<br>';
}
}
?>
大话西游666
Helenr