Разбор одного столбца CSV, разделенного ~HEADER@

У меня есть файл CSV, который нуждается в дополнительной обработке. Я получил большинство наших пользовательских функций. Мое застрявшее на данный момент последнее дополнение к ленте, несколько категорий в 1 столбце. Вот краткий пример новой настройки поля.

Category01@Things~Category01@Will~Category01@Be~Category01@Here~Category02@Testing~Category02@More text here~Category02@Any data~Category02@No more data for this category~LastCategory@This~LastCategory@Is~LastCategory@The~LastCategory@End

Мне нужно построить массив на PHP из каждой доступной категории, аналогично;

$category01 = array('Things', 'Will', 'Be', 'Here');

Любая помощь будет принята с благодарностью. Спасибо!

2 ответа

Gahhh. очки, они ничего не делают!

Если вы не можете изменить эту форму вывода (и она ДОЛЖНА быть изменена на что-то более приятное), вам придется использовать грубую силу:

$csv = '...';
$categories = array();
$parts = explode('~', $csv);
foreach($parts as $part) {
    $bits = explode('@', $part);
    $category = (int)substr($part[0], 8);
    if (!is_array($categories[$category])) {
        $categories[$category] = array();
    }
    $categories[$category][] = $part[1];
}

Конечно, это взорвется на вашем LastCategory вещи в хвостовой части этого "CSV". так что... позвольте мне снова НАСТОЯТЕЛЬНО убедить вас исправить все, что генерирует этот так называемый "CSV" в первую очередь.

Если я правильно понимаю ваш вопрос и формат, категории разделены ~и каждый перечислен как "SomeString@Category Name", то это должно подвох. Однако я не думаю, что это имеет какое-либо отношение к формату CSV.

$pairs = explode('~', $string);
$cats = array();
foreach ($pairs as $pair) {
    list($cat_number, $cat_name) = explode('@', $pair);
    $cats[] = $cat_name;
}
Другие вопросы по тегам