JavaScriptでprint_r()

※以前別の場所で書いた文章を備忘的に書き記しておきます。

【投稿年月日】2011-01-19 【ジャンル】JavaScript

 XML&XBRL解析ライブラリを作成中に、JavaScriptでPHPのprint_r()を実現させることができたので、せっかくですから公開します。

JavaScriptでPHPのprint_r

 参考(と言うか、ほぼそのまま使っているんですけど..)にしたのは下記サイト。感謝です。

Dump() Function - Javascript equivalent of PHP's print_r()
binnyva.blogspot.com/2005/1...
 

ソース

// http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html
function print_r(arr, br, nbsp) {
 br = (br) ? br : "\n";
 nbsp = (nbsp) ? nbsp : " ";
 function dump(arr, br, nbsp, level) {
  var dumped_text = "";
  if(!level) {
   level = 0;
  }
  //The padding given at the beginning of the line.
  var level_padding = "";
  for(var j=0; j<level+1; j++) {
   level_padding += nbsp + nbsp;
  }
  if(typeof(arr)=="object") { //Array/Hashes/Objects
   for(var item in arr) {
    var value = arr[item];
    if(typeof(value)=="object") { //If it is an array,
     dumped_text += level_padding + "[" + item + "] => Array" + br;
     dumped_text += nbsp + level_padding + "(" + br + dump(value, br, nbsp, level+1) + nbsp + level_padding + ")" + br;
    }else {
     dumped_text += level_padding + "[" + item + "] => '" + value + "'" + br;
    }
   }
  }else { //Stings/Chars/Numbers etc.
   dumped_text = "===>" + arr + "<===(" + typeof(arr) + ")";
  }
  return dumped_text;
 }
 return "Array" + br + nbsp + "(" + br + dump(arr, br, nbsp) + nbsp + ")";
}
 元のスクリプトからの主な変更点は以下の通り。
  1. Array()で入れ子状に表示
  2. 改行や空白がカスタマイズ可能
 PHPを主にやっている人間としては、print_r()したときに、配列の要素がArray()で入れ子状に表示されないと気持ち悪いです。また、PHPとJavascriptの両方で同様の見栄えが要求されたため、少しだけ頑張ってみました。

 書式は、print_r(arr, br, nbsp) 。パラメータを指定することで、改行(br)と空白(nbsp)を変更することが可能です。

A. alert() で使う場合

var ary = ["a", "b", "c"];
var txt = print_r(ary);
alert(txt);

B. html 出力する場合

var ary = ["a", "b", "c"];
var txt = print_r(ary, "<br />", "&nbsp;&nbsp;&nbsp;");
document.write(txt);

 サンプルは下記サイトのajaxで確認できます。「Sample XML Parse」の17個のファイルのどれか(「jpfr-asr-E02144-000-2009-03-31-01-2009-06-24-information.xml」など)をクリックすれば下方に表示されます。

XBRL for PHP - XML Perse
mzstyle.s147.xrea.com/xbrlp...

 ちなみに、上記サイトは、XML&XBRL解析ライブラリのサンプルサイトですが、これについては、後ほど別エントリで触れることにします。

EDIUNET | PHP/MySQL | 独り言 | 提供サービス | JavaScript