Изучение различных подходов к преобразованию строки, разделенной запятыми, в многомерный массив в PHP

В PHP преобразование строки, разделенной запятыми, в многомерный массив может быть распространенным требованием при работе с определенными структурами данных. В этом сообщении блога мы рассмотрим различные методы достижения этой задачи. Мы углубимся в примеры кода и объясним каждый подход простыми разговорными словами.

Метод 1: разнесение и цикл
Один простой метод — использовать функцию explode()для разделения строки на массив на основе разделителя-запятой. Затем выполните итерацию по полученному массиву и разбейте каждое значение на подмассивы, используя при необходимости другой разделитель. Вот пример:

$string = "1,2,3|4,5,6|7,8,9";
$array = [];
$segments = explode("|", $string);
foreach ($segments as $segment) {
    $subArray = explode(",", $segment);
    $array[] = $subArray;
}
print_r($array);

Метод 2: регулярное выражение (регулярное выражение)
Использование регулярных выражений может обеспечить большую гибкость при работе со сложными строковыми шаблонами. Мы можем использовать preg_split(), чтобы разделить строку на основе шаблона регулярного выражения. Вот пример:

$string = "1,2,3|4,5,6|7,8,9";
$array = preg_split('/\||,/', $string, -1, PREG_SPLIT_NO_EMPTY);
print_r($array);

Метод 3: декодирование JSON
Если строка, разделенная запятыми, представляет собой действительную структуру JSON, мы можем использовать встроенные функции PHP JSON для преобразования ее в многомерный массив. Вот пример:

$string = '[["1","2","3"],["4","5","6"],["7","8","9"]]';
$array = json_decode($string, true);
print_r($array);

Метод 4: рекурсивный подход
В случаях, когда строка, разделенная запятыми, имеет разные уровни глубины, может оказаться полезным рекурсивный подход. Мы можем определить рекурсивную функцию, которая разбивает строку и рекурсивно вызывает себя для каждого подмассива. Вот пример:

$string = "1,2,3|4,5,6|7,8,9|10,11,12";
$array = [];
function splitString($str) {
    $segments = explode("|", $str);
    $subArray = [];

    foreach ($segments as $segment) {
        if (strpos($segment, '|') !== false) {
            $subArray[] = splitString($segment);
        } else {
            $subArray[] = explode(",", $segment);
        }
    }

    return $subArray;
}
$array = splitString($string);
print_r($array);