cakePHP пройти через плоский массив, чтобы создать строку JSON

Я использую старую версию Cake (1.3).

У меня есть массив, который возвращает структуру каталога, я затем сгладил массив с помощью Set :: Flatten (), и он выводит следующий пример;

Array
(
[0] => Screen Shot 2017-10-09 at 7.08.52 pm-1.png
[projects.raiders.0] => Webserver_requests_graph.jpg
[images.0] => Screen Shot 2017-10-09 at 7.08.52 pm.png
[triggers.0] => Screen_Shot_2017-10-09_at_4_52_32_pm.png
[providers.0] => testScreen Shot 2017-10-09 at 7.08.52 pm.png
)

«Ключ» представляет структуру файла, поэтому 0 — это /, проекты — это каталог, рейдер — это подкаталог проектов и т. Д.

Мне нужно создать строку JSON, которая проходит через каждый слой вышеуказанного массива, и поместить его в следующий формат;

[ ['fullpathname', 'displaytext', 'isfile'] ]

Мне также нужно добавить точки для представления исходной структуры каталогов, поэтому приведенный выше массив превратится в следующую строку JSON;

[
['/', '/', 'false'],
['/Screen Shot 2017-10-09 at 7.08.52 pm-1.png', 'Screen Shot 2017-10-09 at 7.08.52 pm-1.png', 'true'],
['/projects', '.. projects', 'false'],
['/projects/raiders', '.. .. raiders', 'false'],
['/projects/raiders/Webserver_requests_graph.jpg', '.. .. .. Webserver_requests_graph.jpg', 'true'],
['/images', '.. images', 'false'],
['/images/Screen Shot 2017-10-09 at 7.08.52 pm.png', '.. .. Screen Shot 2017-10-09 at 7.08.52 pm.png', 'true'],
['/triggers', '.. triggers', 'false'],
['/triggers/Screen_Shot_2017-10-09_at_4_52_32_pm.png', '.. .. Screen_Shot_2017-10-09_at_4_52_32_pm.png', 'true'],
['/providers', '.. providers', 'false'],
['/providers/testScreen Shot 2017-10-09 at 7.08.52 pm.png', '.. .. testScreen Shot 2017-10-09 at 7.08.52 pm.png', true]
]

Мне было интересно, если бы я мог получить какое-то руководство, я действительно действительно застрял в том, как это сделать. Я слышал о array_walk_recursive, но я не понимаю этого. любая помощь будет принята с благодарностью.

Спасибо

1

Решение

Вы должны сделать это, как показано ниже:

<?php

$final_array = [['/', '/', 'false']]; // i have taken first value from output by-default because i am unable to create any logic for first value through the given input

foreach($array as $key=>$val){
if($key=='0'){
$final_array[] = ['/'.$val,$val,'true'];
}else{
$exploded_key = explode('.',$key);
foreach ($exploded_key as $k=>$v){
if($v =='0'){
$dots = '.. ';
for ($i=0;$i<count(array_slice($exploded_key, 0, $k));$i++){
$dots .= '.. ';
}
$final_array[] = [ '/'. join('/', array_slice($exploded_key, 0, $k)).'/'.$val,$dots.$val,'true'];
}else{
$dots = '.. ';
for ($i=0;$i<count(array_slice($exploded_key, 0, $k));$i++){
$dots .= '.. ';
}
$final_array[] = [ '/'. join('/', array_slice($exploded_key, 0, $k+1)),$dots.$v,'false'];
}
}
}
}

echo "<pre/>";print_r($final_array);

Выход:- https://eval.in/890536

Примечание: — если вы хотите json в качестве вывода, используйте json_encode () как ниже: —

echo json_encode($final_array);

Выход:- https://eval.in/890584

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector