В моем случае я получил этот путь: update.json and 0/1/0/filename.zip
Как и сказал @Barmar, проблема в том, когда я пытаюсь преобразовать массив в объект json.
В PHP массив на самом деле все время является объектом, поэтому ... $ arr = ["0" => ["1" => ...]] для php равно: $ arr = [0 => [1 => ...]].В PHP 7.2.x каждый раз, когда вы будете объединять объекты, "0"
как строковый ключ будет приведен к 0
как int.
Последствия
1.с кодом json
echo json_encode( get_dir_content_to_array(...) );
//result = ["update.json",{"1":[["filename.zip"]]}]
2.с кодом json и JSON_FORCE_OBJECT
echo json_encode( get_dir_content_to_array(...), JSON_FORCE_OBJECT );
//result = {"0":"update.json","1":{"1":{"0":{"0":"filename.zip"}}}}
//I got 1,0,0,filename.zip instead of 0,1,0,filename.zip
3.Добавить (строка)
$path = [array_pop( $a_relative_path)];
foreach ( array_reverse( $a_relative_path ) as $pathPart ) {
$path = [ (string) $pathPart => $path ];
}
//Same result of 2.
Чтобы сохранить правильный порядок для пути, я нашел на данный момент хакерское решение:
Добавьте подчеркивание перед каждым ключом
foreach ( array_reverse( $a_relative_path ) as $pathPart ) {
$path = [ "_" . $a_relative_path => $path ];
}
//result = {"0":"update.json", "_0":{"_1":{"_0":{"0":"filenamezip"}}}}
//With a new file path, I got this :
// {"0":"update.json","_toto":{"_foo":{"0":"test.txt"}},"_0":{"_1":{"_0":{"0":"filename.zip"}}}}
Это решение взломано, но я могу сделать разницу между ключом, который является путем "_0":{"_1":{"_0"
, и ключом для индексации файла "0":"filename.zip"