シェル上でPHPを使ってjsonデータをCSVに変換しようの巻

シェルコマンド上からjsonデータのCSV出力をやってる人って少ないんですね。やる際にはjqコマンド使うのが王道パターンのようです。今回は、jqコマンドが何らかの理由で使えない特殊環境にあってもPHPを使えば可能だよ!というお話。
大まかな処理の流れとしては、
jsonデータを取得しているシェルファイルからphpファイル実行→php側で引数(=jsonデータ)をCSV形式に変換して出力ってカンジです。
以下ソース

1
2
3
4
5
6
7
#getJsonData.sh
 
json_data = [jsonデータ]
 
#php -q でPHP実行
#実行ファイルの後ろに引数を指定する
php -q ./csvConvert.php ${json_data}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#csvConvert.php
 
<?php
    #シェルから受け取ったデータは全て$argvに入る
    $jso_data = $argv;
  
    #$argv[0]にはスクリプトの実行に使うファイル名が
    #格納されているので無かったことにする
    $log_data[0] = '';
  
    #連想配列になっている${json_data}を結合して文字列に変更
    $log_json = implode($log_data);
  
    #json形式のデータを配列形式に変換
    $log_array = json_decode( $log_json , true );
  
    #CSVファイルを開いて保存場所指定
    $fp = fopen('./csv_data.csv', 'w');
  
    ###foreachとか使って保存するデータ取得###
  
    #CSVファイルに書き込み
    fwrite($fp, $data);
  
    #CSVファイルを閉じる
    fclose($fp);
     
    echo "CSV出力が完了しました。" . PHP_EOL;
?>
補足
10行目の文字結合処理は、$argv内のjsonデータが何故かスペースや波括弧で区切られてバラバラに格納されていたから結合するために実行しています。他の環境では不要かもしれません。ちょっと調べてみたけど原因がわからなかった。

注意点
①シェル側から受け取った引数は全て連想配列になって$argvに格納されること。
②$argv[0]には問答無用でファイル名が格納されているので必要なデータは$argv[1]から入ってるってこと。
③上記ソースは超簡潔版なので、ほんとはちゃんと例外処理入れなきゃだめです。