Jump to content
Sign in to follow this  
selishev

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Edited by igon

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


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

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

Share this post


Link to post
Share on other sites

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

 

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

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

3. сохранить

 

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

 

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

1999р минимум.

Share this post


Link to post
Share on other sites

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

 

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

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

3. сохранить

 

 

Спасибо!

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Есть строка: 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; 
?>
 
но что то не соображу, как...
 

Share this post


Link to post
Share on other sites

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

 

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

 

 

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

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

 

explode('-')

explode(',')

 

 

^) 1998р

Edited by chukcha

Share this post


Link to post
Share on other sites

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

 

//Вариант 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;?>


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

Edited by selishev

Share this post


Link to post
Share on other sites

все таки три магические девятки!!!

Share this post


Link to post
Share on other sites

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

 

//Вариант 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 ламп, хром

Share this post


Link to post
Share on other sites
А что будет со строкой

 

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

 

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

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

 

 

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

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

Share this post


Link to post
Share on other sites

 

 

 

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

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

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

Edited by selishev

Share this post


Link to post
Share on other sites

 

— 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

 

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

:-(

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

Edited by selishev

Share this post


Link to post
Share on other sites

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

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

Edited by selishev

Share this post


Link to post
Share on other sites

Разбор строки, отделение по пробелам и запятым, разделение сначала на 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 добавлено для тестирования

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.