Мне нужна небольшая помощь при разбиении содержимого файла на многомерный массив.php разделение файла на многомерный массив
Пример содержимого файла:
--[DEATH KNIGHT]--
--|Blood|--
--{Single}--
/* MACRO CODE FOR SINGLE TARGET */
--{MULTI}--
/* MACRO CODE FOR MULTIPLE TARGETS */
--|Frost|--
/* MACRO CODE FOR SINGLE TARGET */
--{MULTI}--
/* MACRO CODE FOR MULTIPLE TARGETS */
--{Single}--
--[DRUID]--
--|Guardian|--
--{Single}--
/* MACRO CODE FOR SINGLE TARGET */
--{Multi}--
/* MACRO CODE FOR MULTIPLE TARGETS */
Мне нужно прочитать этот файл и разбить его на массив со следующей структурой:
array(
'DEATHKNIGHT' => array(
'Blood' => array(
'Single' = 'Single Target Macro Code',
'Multi' = 'Multiple Target Macro Code'
),
'Frost' => array(
'Single' = 'Single Target Macro Code',
'Multi' = 'Multiple Target Macro Code'
)
),
'DRUID' => array(
'Guardian' => array(
'Single' = 'Single Target Macro Code',
'Multi' = 'Multiple Target Macro Code'
)
)
Я использую file_get_contents() для чтения содержимое файла в строку. Я использую preg_match_all(), чтобы вытащить мои определенные ключи массива. Ниже приведены регулярное выражение, которое я использую:
$class_regex = '/(?:-{2})(?:\[)(?:[A-Z][\w]+)(?:[\s][A-Z][\w]+)?(?:\])(?:-{2})/';
$spec_regex = '/(?:-{2})(?:\|)(?:[A-Z][\w]+)(?:[\s][A-Z][\w]+)?(?:\|)(?:-{2})/i';
$target_regex = '/(?:-{2})(?:\{)(?:[A-Z][\w]+)(?:[\s][\(][\d][\D][\)])?(?:\})(?:-{2})/i';
Я могу вытащить ключи успешно, и я могу отделить файл на конкретные элементы, но я изо всех сил, пытаясь создать свой массив. Любая помощь будет принята с благодарностью. Заранее спасибо.
Прочитайте его по строке с помощью 'while ($ line = fgets ($ file))' вместо того, чтобы читать всю вещь с помощью 'file_get_contents()'. – Barmar
Являются ли эти целевые ключи «Single» и «Multi» статическими (постоянными) в вашем файле? – RomanPerekhrest
Да, «Single» и «Multi» являются статическими. все остальное - нет. «Макро-код» будет меняться по длине. Это означает, что каждый «макрокод» будет охватывать другое количество строк. –