@River0051

Как преобразовать строку в многомерный массив на php?

Здравствуйте, есть такой текст

{{param1;{param2_array};param3;param4};{param5;{param6_array};param7;param8}}


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

создал только 1 массив
$data = $array;
list($param1, $param2, $param3, $param4, $param5) = explode(";", $data);
echo $param1;


но когда данные строка стала такой

{{param1;{param2_array;param2_array;param2_array};param3;param4}}


значения сместились и при одномерном массиве я вывел не те данные которые нужно

Помогите

P.S я прошу прощения если не так назвал массивы или что-то еще
  • Вопрос задан
  • 1141 просмотр
Решения вопроса 1
antoo
@antoo
Для парсинга строк кастомных форматов обычно используются свои парсеры. Подробнее об этом можно прочитать тут (помимо этой есть много других статей): https://habr.com/post/202622/.

Я сделал для вас его простейшую реализацию на PHP: https://3v4l.org/YTrNI
Возможно он потребует доработки, советую разобраться по каким принципам он работает, эти знания иногда могут быть полезными.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Horny_515
@Horny_515
Думаю можно сделать так при условии, что ключами являются цифры
//Отдаем в функцию многомерный массив
function ArraysToString($array) {
//Создаем новый пустой массив для хранения внутренних массивов в виде строк
        $newArray = [];
//Создаем переменную равную нулю (поскольку отсчет в массиве с нуля)
        $x = 0;
//Запускаем цикл, который выполняется столько раз сколько массивов в массиве(отнимаем единицу потому как количество нам даст значение начиная с единицы, а массив нумеруется с нуля) Условие таково, что пока значение переменной меньше количества массивов в массиве цикл выполняется
        while ($x < (count($array)-1)):
//Преобразовываем внутренние массивы и добавляем в наш новый массив
            array_push($newArray, implode($array[$x]));
//После преобразования каждого массива увеличиваем нашу переменную на еденицу и запускаем заново (пока не пройдем все элементы массива - как задано в условии) 
            $x ++;
//Когда условие перестало выполнятся завершаем цикл
        endwhile;
//Преобразовываем в строку получившийся одномерный массив
        $newArray = implode($newArray);
//Возвращаем результат
        return $newArray;
    }

Второй пример не стану расписывать уже - НАДОЕЛО
Если заданы ключи не цифры можно еще так
$array - Наш многомерный массив
function ArraysToString($array) {
   $newArray = [];
   array_walk_recursive($array function($v) use (&$newArray) {
       $newArray[] = $v;
   });
   $newArray = implode('&', $newArray);
   return $newArray;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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