2010-07-14 71 views
0

繼我上一篇關於better syntax for arrays的帖子後,我決定使用JSON格式的數組並使用一種方法將它們轉換爲PHP代碼。轉換數組到PHP代碼

注意,這樣做的最終目的是要寫出JSON一個$配置陣列,並翻譯成PHP代碼(這樣我就可以避免使用PHP的醜陋數組語法):

功能工作正常任意大小和尺寸的數組,也許我可以通過自動縮進來改善它,但沒有更多。有沒有人有任何建議如何使它更好?

+1

這似乎取代了PHP的數組語法的醜陋與一段代碼旨在繞過它的醜陋。 – Amber 2010-07-14 18:04:47

+0

事實上,但最終目標是簡化配置數組的寫入,如果使用PHP編寫的話,這會變得非常混亂。這段代碼將運行一些次,但會使我的生活(以及將繼續維護其餘代碼的人)更容易。 – quantumSoup 2010-07-14 18:07:44

+0

你正在使用json_decode ...爲什麼不使用json_encode呢?請參閱http://php.net/JSON – Cfreak 2010-07-14 18:07:56

回答

0

好的,在聽到所有人的反饋後,我決定做出一個「妥協」。使用現有數組語法的主要原因是其可讀性差,通過使用縮進當然可以提高(很多)。因爲我懶惰縮進(和我寫的文件是巨大的),我選擇了JSON(或任何比PHP更可讀的語法)。我沒有讓自己很清楚,但另一個強烈的理由是爲什麼我使用JSON格式,因爲許多其他人會看這些配置文件。他們中的大多數人不懂PHP,JSON是一種更易讀的格式。

不幸的是,PHP代碼格式化器/美化器在那裏沒有做任何事情陣列格式,所以我編碼我自己的。它基於我上面寫的那段醜陋的代碼(它更醜陋),但是它完成了這項工作。

結果現在我基本上有一個數組美化,並且我可以生成可讀的原生PHP代碼,而懶惰。這就是我想要的,謝謝大家的建議和指導。

PS:這是我和我的函數生成的美化Kohana的配置陣列:

array (
    'default' => array (
     'type'   => 'mysql', 
     'connection' => array (
      'hostname' => 'localhost', 
      'database' => 'kohana', 
      'username' => false, 
      'password' => false, 
      'persistent' => false 
     ), 
     'table_prefix' => '', 
     'charset'  => 'utf8', 
     'caching'  => false, 
     'profiling' => true 
    ), 
    'alternate' => array (
     'type'   => 'pdo', 
     'connection' => array (
      'dsn'  => 'mysql:host=localhost;dbname=kohana', 
      'username' => 'root', 
      'password' => 'r00tdb', 
      'persistent' => false 
     ), 
     'table_prefix' => '', 
     'charset'  => 'utf8', 
     'caching'  => false, 
     'profiling' => true 
    ) 
); 

看起來並不壞。

+0

你可以使用'$ s = var_export($ x,true)'它們只使用'your_parse_beuty($ s)'來美化空格和行。 – 2014-04-22 19:57:05

4

你見過var_export?看起來你已經改造了它。另外,如果你用JSON定義你的配置,你爲什麼把它變成PHP語法?爲什麼不把它看作JSON,json_decode呢,然後按原樣使用它?看起來像維護兩種PHP格式的數據序列化,而JSON格式真的很醜,沒有必要。

我也會迴應琥珀在評論中所說的話......好像你已經用一種更醜陋的黑客替換了有些醜陋,但非常直接的PHP數組語法。沒有冒犯,但這似乎不是一個好主意。來自Kohana PHP框架的配置文件的Here's an example。我沒有發現這個文件特別難看​​,而且它是原生的PHP,所以任何PHP開發人員都可以使用它。

+0

var_export缺少$ cleanKeys的功能(例如:生成'array(1,2)'而不是'array(0 => 1,1,=> 2)') – quantumSoup 2010-07-14 18:12:04

+0

@Aircule這麼重要嗎? – luiscubal 2010-07-14 18:15:21

+0

不是特別的,但會讓事情變得更加混亂。 – quantumSoup 2010-07-14 18:19:09

1

var_export是您的答案!使你更容易。

4

我會盡最大努力說服你不要這樣做。你要求改進你的想法的方法,你可以做的最好的改進就是不去做。

這裏的是Kohana的配置文件的PHP版本:

$test = array(
    'default' => array(
     'type'  => 'mysql', 
     'connection' => array(
      'hostname' => 'localhost', 
      'database' => 'kohana', 
      'username' => FALSE, 
      'password' => FALSE, 
      'persistent' => FALSE, 
     ), 
     'table_prefix' => '', 
     'charset'  => 'utf8', 
     'caching'  => FALSE, 
     'profiling' => TRUE, 
    ), 
    'alternate' => array(
     'type'  => 'pdo', 
     'connection' => array(
      'dsn'  => 'mysql:host=localhost;dbname=kohana', 
      'username' => 'root', 
      'password' => 'r00tdb', 
      'persistent' => FALSE, 
     ), 
     'table_prefix' => '', 
     'charset'  => 'utf8', 
     'caching'  => FALSE, 
     'profiling' => TRUE, 
    ), 
); 

這裏是JSON版本:

var test = { 
    "default": { 
     "type": "mysql", 
     "connection": { 
      "hostname": "localhost", 
      "database": "kohana", 
      "username": false, 
      "password": false, 
      "persistent": false 
     }, 
     "table_prefix": "", 
     "charset": "utf8", 
     "caching": false, 
     "profiling": true 
    }, 
    "alternate": { 
     "type": "pdo", 
     "connection": { 
      "dsn": "mysql:host=localhost;dbname=kohana", 
      "username": "root", 
      "password": "r00tdb", 
      "persistent": false 
     }, 
     "table_prefix": "", 
     "charset": "utf8", 
     "caching": false, 
     "profiling": true 
    } 
}; 

他們幾乎相同。我真的不明白你在獲得什麼。

0

這是我對於

$data = json_decode(file_get_contents(__DIR__ . '/data.json')); 
$code = var_export((array)$data, true); 
$code = "<?php\n return " . preg_replace('/stdClass::__set_state/', '(object)', $code) . ';'; 
file_put_contents(__DIR__ . '/data.array.php', $code); 

數據從JSON文件中獲取解決方案,但可以用別的東西來代替。