Получить имена картинок из папок с затем искать номера в них, а затем вставить в таблицу MySQL для каждого номера соответственно

У меня есть эта папка d:/data/pics, с фото называется 1101-a.jpg, 1101-b.jpg, 1102-a.jpg, 1102-b.jpg и т. д. Фотографии a и b одного и того же номера всегда — обратите внимание, что эти a и b являются просто представлением текста после части ‘number-‘. но для каждого числа всегда есть 2 результата.

И у меня есть база данных MySQL с таблицей «фото». Он имеет столбцы «id», «number», «title1» и «title2». Столбец «число» уже имеет 1101, 1102, 1103 и т. Д.

Мне нужно найти все картинки из каталога, получить числа из их имен, посмотреть те же числа в моей таблице MySQL и вставить соответствующие имена картинок в базу данных. Для каждого номера есть две картинки.

Теперь я знаю, как получить имена из каталога, но мне не удается вставить их в базу данных, потому что у меня есть два изображения с одинаковым номером, которые мне нужно спарить с той же строкой в ​​моем MySQL впоследствии.

     $directory = opendir("d:/data/images");
$image_format = array("jpg, jpeg, png");
$image_names = array();
while ($file = readdir ($directory)) {
if(in_array(substr(strtolower($file), strrpos($file,".") + 1),$image_format))
{
array_push($image_names,$file);
}
foreach ($image_names as $row) {
//HERE I NEED THE NUMBER IN PIC'S NAME EXTRACTED AS A VALUE FOR EACH PIC:
$pic_number = "$_GET INTEGER FROM IMAGE_NAMES (or $row)" ;
// this i don't know.
$id = $_GET($row['id']);
$number = $_GET($row['number']);
//NOW HERE I NEED THAT $pic_number FROM image_names ABOVE... and then
$sql = "INSERT INTO images (title1, title2) VALUES ($row) WHERE $number = $pic_number;";
mysql_query($sql);
}
}
closedir($directory);

Я написал коротко без побега, чтобы максимально упростить проблему.

0

Решение

Я бы сделал что-то вроде этого:

$images = glob("d:/data/images/*-a.{jpg,png,jpeg}", GLOB_BRACE));
foreach($images as $img){
$path_parts = pathinfo($img);
$img = $path_parts['basename'];
$ext = $path_parts['extension'];

$imge = explode('-',$img);
$pic_number = $imge[0];

$file1 = $pic_number."-a.".$ext;
$file2 = $pic_number."-b.".$ext;

.....
}
1

Другие решения

Решение с двумя петлями — это путь к ИМО. Эффективное обновление нескольких строк возможно, если вы установите уникальный индекс на number колонка (что вы должны в любом случае). Вы могли бы использовать MySQL ON DUPLICATE KEY UPDATE клаузула тогда. Перед использованием кода ниже убедитесь, что у вас есть уникальный индекс на number столбец (уникальный id недостаточно):

$img_files = glob("files/*.{jpg,JPG,png,PNG,jpeg,JPEG}", GLOB_BRACE);
$data = array();
foreach ($img_files as $img_file) {
$filename = basename($img_file);
$split_filename = explode('-', $filename, 2);
$number_prefix = (int) $split_filename[0];
$data[$number_prefix][] = $filename;
}

// assuming 0 can't be prefix number $data[0] represents invalid file (without number prefix) - not needed aparently
// unset($data[0]);

$insert_values = '';
foreach ($data as $number => $row) {
$title1 = $row[0];
$title2 = isset($row[1]) ? $row[1] : ''; // empty string in case there's no second file
$insert_values .= "('$number','$title1','$title2'),";
}

$sql = 'INSERT INTO images (number, title1, title2) VALUES ' . substr($insert_values, 0, -1) . '
ON DUPLICATE KEY UPDATE title1 = VALUE(title1), title2 = VALUE(title2)';
//... run query

без индекса UPDATE Запросы легко построить во втором цикле (имеют номер и оба имени файла).

Редактировать: Looped UPDATE версия:

//... $insert_values not needed
foreach ($data as $number => $row) {
$title1 = $row[0];
$title2 = isset($row[1]) ? $row[1] : ''; // empty string in case there's no second file
$sql = "UPDATE images SET title1 = '$title1', title2 = '$title2' WHERE number = $number";
// ... execute query
}
0

По вопросам рекламы [email protected]