Чем заменить заменить case?

Не хочется быть говно кодером...
Пишу парсер прайс-листа .csv файла через fgetcsv.
Сам прайс - это около 13к строк и 15 колонок.

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

Параллельно на основе некоторых колонок формирую еще данные (чистый артикул, цена в валюте и прочее). Грубо говоря, скрипт импорта выполняет всю "грязную" работу, а сама CMS использует готовые данные.

Все было хорошо, пока не потребовалось распарсивать артикул товара.
В прайс листе присутствует одна конкретная категория. Но сам товар можно раскидать по другим фильтрам, например "красный шар для правши" имеет категорию "форма - шар".
Но в артикуле есть дополнительная информация, конкретно меня интересуют "2,3,4" символы.

Беру я их незамысловато
$artikul[1].$artikul[2].$artikul[3]

Затем сравниваю через switch case и прописываю русское название
switch ($artikul[1].$artikul[2].$artikul[3])
		{
		case "001" :	$data = "Группа 001"; break;
		case "002" :	$data = "Группа 002"; break;

		default :	$data = ""; break;
		}


Артикул проставлен у конкретного поставщика (всего их около 5-7), и естественно идет предварительная проверка. Если нужный производитель, парсим артикул.

42 секунды с switch
35 секунды без switch

Тонкое место именно "switch case", а "else if" усугубляет ситуацию совсем
  • Вопрос задан
  • 2615 просмотров
Решения вопроса 1
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Набор бессвязных фраз, а не вопрос. Пожалуйста, попробуйте задать вопрос в максимум одно предложение, не более 140 символов. Глядя на исходный код - в чём проблема сделать массив с ключами равными значениям 001 002, а значениями массива - то, что в $data?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
alexclear
@alexclear
A cat
Можно написать расширение для PHP на C, которое будет экспортировать функцию, которая на вход будет принимать входные значения, а на выходе давать все то же самое, что давал бы PHP-шный switch. Кода получится не так много, работать будет существенно быстрее.
Ответ написан
reffy
@reffy
Я молодец.
Я понял смысл вопроса так -- "Мой парсер работает 35 секунд без использования switch, и 42 секунды с использованием switch, но мне кажется, что я гавнокодер и switch мне не нужен. Помогите оптимизировать switch".

У меня тоже есть такая проблема. Мой скрипт отлично работает, очень быстро и меня всё устраивает. Но моим скриптом приходится обслуживать базу данных размером около 4гб, а это занимает не мало времени. Вот мне кажется что я гавнокодер и это слишком долго, как решить мою проблему?
Ответ написан
Комментировать
@xsash Автор вопроса
Выходные удались )
Тогда перефразирую по другому.

Является ли конструкция со switch оптимальной для такого рода задачи?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы