繼我上一篇關於better syntax for arrays的帖子後,我決定使用JSON格式的數組並使用一種方法將它們轉換爲PHP代碼。轉換數組到PHP代碼
注意,這樣做的最終目的是要寫出JSON一個$配置陣列,並翻譯成PHP代碼(這樣我就可以避免使用PHP的醜陋數組語法):
功能工作正常任意大小和尺寸的數組,也許我可以通過自動縮進來改善它,但沒有更多。有沒有人有任何建議如何使它更好?
繼我上一篇關於better syntax for arrays的帖子後,我決定使用JSON格式的數組並使用一種方法將它們轉換爲PHP代碼。轉換數組到PHP代碼
注意,這樣做的最終目的是要寫出JSON一個$配置陣列,並翻譯成PHP代碼(這樣我就可以避免使用PHP的醜陋數組語法):
功能工作正常任意大小和尺寸的數組,也許我可以通過自動縮進來改善它,但沒有更多。有沒有人有任何建議如何使它更好?
好的,在聽到所有人的反饋後,我決定做出一個「妥協」。使用現有數組語法的主要原因是其可讀性差,通過使用縮進當然可以提高(很多)。因爲我懶惰縮進(和我寫的文件是巨大的),我選擇了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
)
);
看起來並不壞。
你可以使用'$ s = var_export($ x,true)'它們只使用'your_parse_beuty($ s)'來美化空格和行。 – 2014-04-22 19:57:05
你見過var_export
?看起來你已經改造了它。另外,如果你用JSON定義你的配置,你爲什麼把它變成PHP語法?爲什麼不把它看作JSON,json_decode
呢,然後按原樣使用它?看起來像維護兩種PHP格式的數據序列化,而JSON格式真的很醜,沒有必要。
我也會迴應琥珀在評論中所說的話......好像你已經用一種更醜陋的黑客替換了有些醜陋,但非常直接的PHP數組語法。沒有冒犯,但這似乎不是一個好主意。來自Kohana PHP框架的配置文件的Here's an example。我沒有發現這個文件特別難看,而且它是原生的PHP,所以任何PHP開發人員都可以使用它。
var_export缺少$ cleanKeys的功能(例如:生成'array(1,2)'而不是'array(0 => 1,1,=> 2)') – quantumSoup 2010-07-14 18:12:04
@Aircule這麼重要嗎? – luiscubal 2010-07-14 18:15:21
不是特別的,但會讓事情變得更加混亂。 – quantumSoup 2010-07-14 18:19:09
var_export是您的答案!使你更容易。
我會盡最大努力說服你不要這樣做。你要求改進你的想法的方法,你可以做的最好的改進就是不去做。
這裏的是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
}
};
他們幾乎相同。我真的不明白你在獲得什麼。
這是我對於
$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文件中獲取解決方案,但可以用別的東西來代替。
這似乎取代了PHP的數組語法的醜陋與一段代碼旨在繞過它的醜陋。 – Amber 2010-07-14 18:04:47
事實上,但最終目標是簡化配置數組的寫入,如果使用PHP編寫的話,這會變得非常混亂。這段代碼將運行一些次,但會使我的生活(以及將繼續維護其餘代碼的人)更容易。 – quantumSoup 2010-07-14 18:07:44
你正在使用json_decode ...爲什麼不使用json_encode呢?請參閱http://php.net/JSON – Cfreak 2010-07-14 18:07:56