Поэтому я пытаюсь сделать импорт товаров из магазина. В базе данных у меня есть вся необходимая информация о продукте (ID, имя). Сложная часть — картины.
Там есть папка с изображением товара, которая имеет такую структуру:
Manufacturer folder -> .jpg's named "XXX - name_name_name" where XXX - product ID.
Например — "C:/pictures/nike/100 - shoes1.jpg"
Существует около 20 производителей (папок), всего около 8 тыс. Товаров.
Если я укажу путь к папке с изображениями, как я могу получить такие данные, как «имя производителя (имя папки), идентификатор продукта (вырезано из полного имени), URL-адрес изображения» для каждого изображения, которое можно использовать для сравнения с записями базы данных и установить правильную картинку для продукта? Стоит ли вообще делать такой массив с php?
Пример записи в базе данных продукта:
Имя ID
100 Nike_shoes1
Что я получаю из запроса на выбор (может использоваться только ID, название продукта в БД и на картинке может отличаться)
array(25) {
[0]=>
array(8) {
["category"]=>
string(10) "6"["ID"]=>
string(20) "1659"["name"]=>
string(70) "Relyx U100 TR 56839 (3M) - nebetiekiama"["price"]=>
string(6) "286.69"["qnt"]=>
string(1) "0"["COL 6"]=>
string(4) "vnt"["pvm"]=>
string(5) "21.00"["COL 8"]=>
string(9) "20140 "}
поэтому результат должен быть примерно таким:
(массив картинок)
["pictureUrl"]=>
string(10) "C:/pictures/nike/100 - Nike_shoes1.jpg"["manufacturer"]=>
string(10) "nike"["id"]=>
string(10) "100"
и тогда я мог бы сравнить это с тем, что у меня есть, как
foreach ($pictures as $key => $picture){
if($product['id'] == $picture['id']) {
$product['picture'] = $picture['pictureUrl'];
$product['manufacturer'] = $picture['manufacturer'];
}
}
Дайте мне знать, если вопрос уместен, или я должен добавить что-нибудь.
Поместите папку с картинками в каталог php, если у вас есть проект с именем products
в вашем www, или дома, или htdocs. i.g C: / xampp / htdocs / products / images
Из того, что я вижу, у вас есть вся информация в названии изображения (я надеюсь, что имена изображений стандартизированы так, как вы упомянули)
Давайте начнем работу:
Получить имена изображений из базы данных:
псевдокод
$images_list = $images->getAllAssoc("id","image_name");
//prints:
array(
[100]=>"Nike_shoes1"[200]=>"Nike_shoes2"[300]=>"Nike_shoes3")
//Now let's loop and generate the output
$image_base_url="pictures";//can change
foreach ($images_list as $image_id => $image_name)
{
$image_parts= explode("_", $image_name); // [0]=Nike, [1]=shoes1
$img_arr["manufacturer"] = $image_parts[0];
$img_arr["id"] = $image_id;
$img_arr["pictureUrl"] = "{$image_base_url}/{$img_arr["manufacturer"]}/{$image_id} - {$image_name}";///pictures/nike/100 - Nike_shoes1.jpg
//compose in the final result array
$producs_images[] =$img_arr;
}
ОБНОВИТЬ:
Судя по вашим комментариям, я, по крайней мере, так бы поступил на вашем месте.
Я создам новую таблицу (или добавлю новый столбец / поле в БД) и назову ее «производитель». Таким образом, зная производителя вашего продукта, вы можете легко найти изображение.
Мой подход будет состоять в том, чтобы создать новое поле в таблице продуктов и назвать его «производитель», а затем перейти в каталог с изображениями и пройтись по всем папкам, чтобы зафиксировать имя производителя. 2 — получить все идентификаторы продуктов в нем. Я предполагаю, что продукты — это имена папок в папке manif. А затем обновите столбец производителя в вашей базе данных.
Будьте осторожны, чтобы полный URL-адрес, который я использовал для доступа к моему локальному файлу pic на моей машине с Windows. Вам нужно отредактировать ваши собственные наборы, будь то в localhost или позже на рабочем сервере.
Моя структура выглядит следующим образом:
Пример кода:
$main_dir = "\SERVER\htdocs\phpProject1\pictures";
$dir_list = new ParentIterator(new RecursiveDirectoryIterator($main_dir));
$it = new RecursiveIteratorIterator($dir_list, RecursiveIteratorIterator::SELF_FIRST);
// Optionally, limit the depth of recursion with $it->setMaxDepth($number)
$it = iterator_to_array($it, true);
$c = 1;
foreach ($it as $dir) {
echo $dir;
echo PHP_EOL;
$chunks = explode("\\", $dir);
$arr["manif"] = $chunks[5];
if ($c !== 1) {
$arr["prodcut_id"] = $chunks[6];
$p_arr[] = $arr;
}
$c++;
}
print_r($p_arr);
Выход:
\SERVER\htdocs\phpProject1\pictures\nike
\SERVER\htdocs\phpProject1\pictures\nike\100
\SERVER\htdocs\phpProject1\pictures\nike\200
\SERVER\htdocs\phpProject1\pictures\nike\300
Array
(
[0] => Array
(
[mani] => nike
[prodcut_id] => 100
)
[1] => Array
(
[mani] => nike
[prodcut_id] => 200
)
[2] => Array
(
[mani] => nike
[prodcut_id] => 300
)
)
Done.
Теперь у вас есть идентификатор продукта вместе с его производителем, собранный из папки с изображениями, и вам нужно обновить столбец производителя, который вы добавили в базу данных, на основе идентификатора продукта.
Других решений пока нет …