Intereting Posts
Авторизовать с помощью curl и parse с помощью простого html dom не работает Как создать большое (высокое качество 300 точек на дюйм) изображение из JSON / массив данных (ширина, высота, x, y, ангелы) с помощью PHP ImageMagic / Imagick find_in_set в левом соединении в Laravel Хранение паролей для MYSQL в приложении PHP безопасным способом Печать массива Предупреждение: Отсутствует 1 аргумент Zend Framework 2 Маршрутизация поддоменов к модулю Просмотр кодового словаря в виде Как заставить загрузку изображений в браузере? Разрешать только URL-адреса, указанные в маршрутах, в Codeigniter php imagejpeg () Не удается открыть, Нет такого файла или каталога или разрешено отклонение Необходимо добавить поиск в статический HTML-сайт Как обнаружить и повторить последний гласный в слове? лучший подход для слайдера jQuery с динамическим представлением / следующим контентом? Хорошая обработка ошибок с помощью file_get_contents

Многомерный массив из строки

Предположим, у меня есть эта строка, которую я хочу разместить в многомерном массиве.

Изменить: количество подпапок в строке является динамическим .. от нулевых подпапок до 10

<?php $string ="Folder1/Folder2/Folder3/filename1\n"; $string .=" Folder1/Folder2/Folder3/filename2\n"; $string .=" Folder4/Folder2/Folder3/filename3\n"; ?> 

Я хочу вернуть следующий массив

 <?php Array ( [Folder1] => Array ( [Folder2] => Array ( [Folder3] => Array ( [0] => filename1 [1] => filename2 ) ) ) [Folder4] => Array ( [Folder2] => Array ( [Folder3] => Array ( [0] => filename3 ) ) ) ) ?> 

Каким будет самый эффективный способ достичь этого?

И для удовольствия от этого, скажем, этот массив будет отправлен на другую сторону мира, и он хочет вернуться к строке. Как мы это сделаем?

Related of "Многомерный массив из строки"

Вы могли бы заимствовать фрагменты кода из этого класса , в _processContentEntry метод _processContentEntry .

Вот модифицированная версия метода, который выполняет задание:

 function stringToArray($path) { $separator = '/'; $pos = strpos($path, $separator); if ($pos === false) { return array($path); } $key = substr($path, 0, $pos); $path = substr($path, $pos + 1); $result = array( $key => stringToArray($path), ); return $result; } 

Выход

 var_dump(stringToArray('a/b/c/d')); 

Будет

 array(1) { ["a"]=> array(1) { ["b"]=> array(1) { ["c"]=> array(1) { [0]=> string(1) "d" } } } } 

Полагаю, это то, что вам нужно 🙂


ОБНОВИТЬ

В соответствии с вашим комментарием, вот как вы можете обрабатывать строку, разделенную новыми строковыми символами:

 $string = "Folder1/Folder2/Folder3/filename1\n"; $string .= " Folder1/Folder2/Folder3/filename2\n"; $string .= " Folder4/Folder2/Folder3/filename3\n"; // split string into lines $lines = explode(PHP_EOL, $string); // trim all entries $lines = array_map('trim', $lines); // remove all empty entries $lines = array_filter($lines); $output = array(); // process each path foreach ($lines as $line) { // split each line by / $struct = stringToArray($line); // merge new path into the output array $output = array_merge_recursive($output, $struct); } print_r($output); 

PS Чтобы преобразовать этот массив в строку, просто вызовите json_encode , однако я не вижу причин для его преобразования в массив, а затем обратно к тому, что было.

Я думаю, это то, что вы хотите,

 $string ="Folder1/Folder2/Folder3/filename1\n"; $string .="Folder1/Folder2/Folder3/filename2\n"; $string .="Folder4/Folder2/Folder3/filename3\n"; $string_array_1 = explode("\n", $string); $array_need = array(); foreach($string_array_1 as $array_values) { if($array_values) { $folders = explode("/", $array_values); $array_need[$folders[0]][$folders[1]][$folders[2]][] = $folders[3]; } } print_r($array_need);