PHP: конвертировать между массивом 1 в глубину в несколько глубоких json [duplicate]

В Bash (и ksh, zsh, тире и т. д.) вы можете использовать расширение параметра с %, которое удалит символы из конца строки или #, которые будут удалять символы с начала строки , Если вы используете один из этих символов, минимальная совпадающая строка будет удалена. Если вы удвоите символ, самый длинный будет удален.

$ a='hello:world'
$ b=${a%:*}
$ echo "$b"
hello
$ a='hello:world:of:tomorrow'
$ echo "${a%:*}"
hello:world:of
$ echo "${a%%:*}"
hello
$ echo "${a#*:}"
world:of:tomorrow
$ echo "${a##*:}"
tomorrow
2
задан Get Off My Lawn 17 January 2015 в 00:53
поделиться

2 ответа

Возможно, вы сможете взорвать путь на /, а затем использовать forloop для размещения всех частей внутри другого массива.

Затем вы можете добавить if (...), если текущая папка или файл уже находится в массиве. если это правда, вы продолжаете, иначе вы добавите его в массив, а затем продолжите

0
ответ дан Marcel 17 August 2018 в 11:57
поделиться
if (in_array($content["ext"], array("zip"))) {
    $zip = zip_open($file);

    $files = array();

    while ($zip_entry = zip_read($zip)) {
        $zip_path = zip_entry_name($zip_entry);
        $path = explode("/", $zip_path);
        $path = array_filter($path);
        $lastElement = end($path);

        //reset pointer
        $cur = &$files;

        $count = count($path);

        //set pointer to proper parent folder
        for ($i = 0; $i < $count - 1; $i++) {
            $cur = &$cur[$path[$i]];
        }

        //add file
        $cur[] = $path[$i];
    }

    //delete pointer
    unset($cur);
}

print_r($files);
1
ответ дан Weltschmerz 17 August 2018 в 11:57
поделиться
  • 1
    На этой строке $cur[] = $path[$i]; я получаю Fatal error: [] operator not supported for strings – Get Off My Lawn 17 January 2015 в 15:45
  • 2
    Вы уверены, что скопировали код правильно? Я думаю, вы могли бы получить эту ошибку, если в цикле for вы скажете $cur = $path[$i]; вместо $cur = &$cur[$path[$i]]; или вы пропустили строку $files = array(); – Weltschmerz 17 January 2015 в 20:36
  • 3
    да, я полностью скопировал его, единственное, что у меня есть, это мой $files массив над оператором if. – Get Off My Lawn 18 January 2015 в 03:17
  • 4
    если я обернуваю if(is_array($cur)) вокруг него, то он будет работать там, где папки будут добавляться как файлы, а некоторые файлы отсутствуют. – Get Off My Lawn 18 January 2015 в 03:22
  • 5
    Может быть, я не собираюсь этого делать правильно. В основном то, что я делаю, делает такое сбрасываемое дерево, как это (под заголовком Содержимое пакета ): assetstore.unity3d.com/en / #! / Content / 14147 – Get Off My Lawn 18 January 2015 в 05:14
Другие вопросы по тегам:

Похожие вопросы: