<?php

function parseInfo($data, $category = "charki") {
    $found = array();
    $matches = array();

    switch ($category) {
        case "charki":
            $pattern_parts = array(
                'item' => '(?P<item>\D{1,8})',
                'category' => '\[(?P<category>\d{1,2})\]',
                'multiplier' => '(?:\(x(?P<multiplier>\d{1,2})\))?',
                'mode' => '(?P<mode>[PVFERUL]+)'
            );
            $pattern = '@Зачаровать' . join('\s*', $pattern_parts) . '@u';
            break;
    }

    preg_match($pattern, $data, $found);
    
    foreach ($found as $k => $v) {
        if (!is_int($k)) {
            $matches[$k] = ($k === 'multiplier' && empty($v)) ? 1 : trim($v); 
        }
    }
    
    return $matches;
}

$db = array();
$text = 'Зачаровать Обувь [11] F (Масса: 0.1)
Развернуть/свернутьДолговечность: 0/1
Требуется минимальное:
Уровень: 11
Действует на:
Защита от колющего урона: +2
Защита от рубящего урона: +4
Защита от дробящего урона: +2
Зачаровать Поножи [11] F (Масса: 0.1)
Развернуть/свернутьДолговечность: 0/1
Требуется минимальное:
Уровень: 11
Действует на:
Мф. против увертывания (%): +4
Защита от магии: +1
Защита от магии огня: +2
Защита от колющего урона: +2
Защита от дробящего урона: +1
Защита от режущего урона: +1
Защита от магии воды: +1';

$lines = explode(PHP_EOL, $text);

foreach ($lines as $line) {
    $temp = parseInfo($line, $category = "charki");
    if (!empty($temp)) {
        $db[] = $temp;
    }
}

print_r($db);