2017-11-01 4 views
1

私はCake(1.3)の古いバージョンを使用しています。PHPがjson文字列を作成するためにフラットな配列を歩く

私はディレクトリの構造体を返す配列を持っているので、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を作成する必要があります上記の配列の各レイヤーを通り、以下のフォーマットにします。私はまた、上記の配列は、以下のJSON文字列に変わりますので、元のディレクトリ構造を表現するためにドットを追加する必要が

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

[ 
    ['/', '/', '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について聞いたことがあるが、私はそれを理解していない。どんな助けでも大歓迎です。

は、あなたが以下のようにそれを行う必要があり

+0

これは.. .. .. Webserver_requests_graph.jpg'それは無効ではありません。私はそれが../../../ Webserver_requests_graph.jpgなどである必要があると思う他の人のために –

+0

私が説明した形式を見て...それは '表示テキスト'何に出力されますユーザー – BigJobbies

+0

あなたの入力 '5'項目と出力' 11'はなぜですか、または何か不足しています。 – ArtisticPhoenix

答えて

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_encode()を使用し、出力としてJSONをしたい場合: -

echo json_encode($final_array); 

出力: - https://eval.in/890584

+0

です。配列に戻すだけで、出力に似たJSON文字列に変換する必要があります私の質問 – BigJobbies

+0

の最後に 'json_encode()'を使ってjsonの出力を取得します。これを確認してください: - https://eval.in/890584 –

+0

ああ、それはまさにそれ...私はあなたにこれまでのご協力ありがとうございました。 – BigJobbies

関連する問題