Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как изменить массово порядок слов в названии товара?


selishev

Recommended Posts

Подскажите, как мне изменить порядок слов в названии товара, массово, товаров несколько тысяч?
К примеру, у меня сейчас: 

— CL222160 Люстра потолочная Citilux Рандом , 6 ламп, хром

а надо что бы было:

Люстра потолочная Citilux Рандом — CL222160, 6 ламп, хром
Надіслати
Поділитися на інших сайтах


Порядок слов у ВСЕХ названий будет меняться по ЕДИНОМУ правилу

"Подстроку вида '— XXXXXXXX ' переместить в позицию перед первой запятой" ?

Змінено користувачем igon
Надіслати
Поділитися на інших сайтах


Порядок слов у ВСЕХ названий будет меняться по ЕДИНОМУ правилу

"Подстроку вида '— XXXXXXXX ' переместить в позицию перед первой запятой" ?

Да, именно...как это реализовать?

Может в batch editor можно?

Надіслати
Поділитися на інших сайтах


UPDATE oc_product SET name = concat(substr('name', от второго пробела до запятой), substr('name', от начала до второго пробела), substr(остаток)).

Идея, думаю, понятна. Готового рабочего решения у меня нет

Надіслати
Поділитися на інших сайтах


Желательно написать такой обработчик

 

1. получить все имена (что там с языками)

2. на php сделать замену

3. сохранить

 

4. Если скрипт не справляется с нагрузкой, по времени, по памяти создать ....

 

Т.е. нужно писать...

1999р минимум.

Надіслати
Поділитися на інших сайтах

Желательно написать такой обработчик

 

1. получить все имена (что там с языками)

2. на php сделать замену

3. сохранить

 

 

Спасибо!

Но, что то не очень понимаю, как мне в названии отделить артикул от серии, местами то их поменять я понял как, например strtr или str_replace.

Надіслати
Поділитися на інших сайтах


Разбор строки, отделение по пробелам и запятым, разделение сначала на 3 строки, потом собрать в 1. В любом случае скрипт писать нуно. Во всяком случае по другому не знаю как.

Надіслати
Поділитися на інших сайтах


Есть строка: 105BB - Ночник светодиодный с таймером выключения Citilux Медведь, белый

Вот как мне поменять местами элементы перед запятой, поставить перед запятой 1 и 2 элементы уже разбитой на массив строки.
Что бы получилось:  Ночник светодиодный с таймером выключения Citilux Медведь - 105BB, белый

Можно было бы конечно что-то вроде

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6"; 

$pieces = explode(" ", $pizza); 
$text =$pizza;
$repl=array ($pieces[0]=>$pieces[4], $pieces[4]=>$pieces[0]);
echo "str_replace(): ".str_replace(array_keys($repl), array_values($repl), $text)."<br>";
echo "strtr(): ".strtr($text, $repl)."<br>";

но, проблема в том, что в каждой строке разное количество слов.
Потому надо отталкиваться от запятой, всё таки.
Как нибудь бы этим способом:
$s = 'Торты пирожные всё это - сладости'; 
  $p = '#([а-яё]+) - ([а-яё]+)#ui'; 
  $r = '$2 - $1'; 
  $s = preg_replace($p,$r,$s); 
  echo $s; 
?>
 
но что то не соображу, как...
 
Надіслати
Поділитися на інших сайтах


105BB - Ночник светодиодный с таймером выключения Citilux Медведь, белый

 

- ограничитель

 

 

Ночник светодиодный с таймером выключения Citilux Медведь, белый

, ограничитель

 

explode('-')

explode(',')

 

 

^) 1998р

Змінено користувачем chukcha
Надіслати
Поділитися на інших сайтах

Короче, может кому пригодится:

 

//Вариант 1echo p$str = '1202 — Абажур Citilux Oliver Монетки, белый с черным';reg_replace('/^([^,—]+)(\s—\s)([^,]+)(,.+)$/', '$3$2$1$4', $str)."<br>"; //Вариант 2$str = '1202 — Абажур Citilux Oliver Монетки, белый с черным';$parts = explode('—', $str);$first = trim($parts[0]);$parts = explode(',', $parts[1]);$result = trim($parts[0]) . " — $first, " . trim($parts[1]);echo $result;?>


Обратите внимание на то что у меня не просто "-" а "—" , это важно)

Змінено користувачем selishev
Надіслати
Поділитися на інших сайтах


Короче, может кому пригодится:

 

//Вариант 1echo p$str = '1202 — Абажур Citilux Oliver Монетки, белый с черным';reg_replace('/^([^,—]+)(\s—\s)([^,]+)(,.+)$/', '$3$2$1$4', $str)."<br>"; //Вариант 2$str = '1202 — Абажур Citilux Oliver Монетки, белый с черным';$parts = explode('—', $str);$first = trim($parts[0]);$parts = explode(',', $parts[1]);$result = trim($parts[0]) . " — $first, " . trim($parts[1]);echo $result;?>

Обратите внимание на то что у меня не просто "-" а "—" , это важно)

 

А что будет со строкой 

— CL222160 Люстра потолочная Citilux Рандом , 6 ламп, хром
Надіслати
Поділитися на інших сайтах


А что будет со строкой

 

Это уже не важно...

 

Главное, что человек сам сделал, то что ему нужно было..

Пусть это у него получилось не везде, но!!!

 

 

echo p$str = '1202 — Абажур Citilux Oliver Монетки, белый с черным';

reg_replace('/^([^,—]+)(\s—\s)([^,]+)(,.+)$/', '$3$2$1$4', $str)."<br>";
 
 
Где-то ж накопал (наверное, кто-то подсказал)
Я конечно понимаю, что там написано, но понял ли он?
 
А вот второй вариант - он прозрачный
Надіслати
Поділитися на інших сайтах

 

 

 

Я конечно понимаю, что там написано, но понял ли он?
 
 

Не, нихрена не понял))) Нашел на форумах))

Второй вариант проще и логичнее)

Змінено користувачем selishev
Надіслати
Поділитися на інших сайтах


 

— CL222160 Люстра потолочная Citilux Рандом , 6 ламп, хром

CL222160 Люстра потолочная Citilux Рандом — , 6 ламп

Fatal error: Uncaught Error: Call to undefined function reg_replace() in C:\xampp\htdocs\test_replace.php:54 Stack trace: #0 {main} thrown in C:\xampp\htdocs\test_replace.php on line 54

 

первый и второй 

:-(

Хорошо у меня таких названий нет)

Змінено користувачем selishev
Надіслати
Поділитися на інших сайтах


Нашел ошибку... криво скопировал.

$str = '105BB - Ночник светодиодный с таймером выключения Citilux Медведь, белый';
echo preg_replace('/^([^,-]+)(\s-\s)([^,]+)(,.+)$/', '$3$2$1$4', $str);

Змінено користувачем selishev
Надіслати
Поділитися на інших сайтах


Разбор строки, отделение по пробелам и запятым, разделение сначала на 3 строки, потом собрать в 1. В любом случае скрипт писать нуно. Во всяком случае по другому не знаю как.

 

Без скрипта:

UPDATE oc_product_description
  SET name1 = concat(SUBSTRING_INDEX(SUBSTRING(name, POSITION('-' IN name) + 2), ',', 1),
                     ' -',
                     SUBSTRING_INDEX(name, '-', 1),
                     SUBSTRING(name, POSITION(',' IN name)))
name1 добавлено для тестирования
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.