2010-07-14 8 views
0

내 마지막 게시물 인 better syntax for arrays에 이어 배열 용 JSON 형식을 사용하고이를 PHP 코드로 변환하는 방법을 사용하기로 결정했습니다. 이것의 궁극적 인 목표는 될 JSON 달러 (A $)의 구성 배열을 작성하고 (그래서 PHP의 추한 배열 구문을 사용하는 것을 방지 할 수 있습니다) PHP 코드로 그것을 번역하는 것입니다배열을 PHP 코드로 변환

참고 :

기능은 잘 동작 임의의 크기와 차원을 가진 배열을 자동으로 들여 쓰기하여 향상시킬 수는 있지만 훨씬 더 많지는 않습니다. 더 나은 방법에 대한 제안이있는 사람이 있습니까?

+1

PHP의 배열 구문이 추악한 코드 조각을 대체하려고합니다. – Amber

+0

실제로, 궁극적 인 목표는 config 배열의 작성을 단순화하는 것입니다. PHP에서 작성된 경우 실제로 어수선하게 될 수 있습니다. 이 코드는 여러 번 실행되지만 내 삶을 (그리고 코드의 나머지 부분을 유지하려는 사람은) 쉽게 만듭니다. – quantumSoup

+0

json_decode를 사용하고 있습니다 ... json_encode도 사용하지 않으시겠습니까? http://php.net/JSON – Cfreak

답변

0

여기 모두의 의견을 듣고 나서 "타협"을하기로 결정했습니다. 기존 배열 구문을 사용하는 주요 쇠고기는 가독성이 좋지 않으므로 들여 쓰기를 사용하여 확실히 향상시킬 수 있습니다.

들여 쓰기가 게으르다 (그리고 내가 작성한 파일이 거대하다.) JSON (또는 PHP보다 읽기 쉬운 구문)을 선택했다. 나 자신을 매우 분명하게 만들지는 않았지만 다른 많은 사람들이이 설정 파일을 볼 것이므로 JSON 형식을 사용하는 다른 강력한 이유가 있습니다. 대부분은 PHP에 익숙하지 않으며 JSON은 사람이 읽을 수있는 형식입니다.

불행히도 PHP 코드 포맷터/미용사는 배열 형식을 지정하지 않으므로 내 코드를 코딩했습니다. 그것은 위에 쓴 코드의 추악한 부분을 기반으로합니다 (그리고 그것은 더 못생긴 것입니다). 그러나 그것은 일을합니다.

결과는 기본적으로 배열 미화가 기본적으로 제공되며 게으르면서 읽을 수있는 기본 PHP 코드를 생성 할 수 있습니다. 그게 내가 원하는 전부 다. 제안과 조언에 감사한다.

PS :

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 
    ) 
); 

모든 나쁜 보이지 않는 : 여기 내 기능으로 생성 된 아름답게 Kohana의 구성 배열입니다.

+0

'$ s = var_export ($ x, true)'는'your_parse_beuty ($ s)'를 사용하여 공백과 줄을 아름답게합니다. –

4

당신은 var_export을 보았습니까? 당신이 그것을 다시 만든 것처럼 보입니다.

또한 JSON에서 구성을 정의하는 경우 PHP 구문으로 변환하는 이유는 무엇입니까? JSON으로 읽어들이는 것이 아니라 json_decode입니다. 그런 다음 그대로 사용하십시오. 데이터를 PHP 형식으로 모두 유지 관리하는 것처럼 보입니다. JSON 형식은 실제로보기 흉하고 불필요합니다.

앰버 (Amber)가 주석에서 말한 것을 반향시킵니다 ... 다소 못생긴하지만 매우 직선적 인 PHP 배열 구문을 훨씬 해킹 된 해킹으로 대체 한 것처럼 보입니다. 불쾌감은 없지만 이것은 아주 좋은 생각처럼 보이지 않습니다. Here's an example은 Kohana PHP 프레임 워크의 설정 파일입니다. 필자는이 파일을 읽기가 매우 추한 것으로 보지 않으며, PHP를 기본으로하므로 모든 PHP 개발자가이 파일을 사용할 수 있습니다.

+0

var_export는 $ cleanKeys 기능이 없습니다 (예 :'array (0 => 1, 1 => 2)'대신'array (1,2) 생성)' – quantumSoup

+0

@Aircule 그렇게 중요합니까? – luiscubal

+0

극단적 인 것은 아니지만 일이 훨씬 복잡해집니다. – quantumSoup

1

var_export는 답변입니다. 훨씬 쉬워 지네.

4

나는 이것을하지 않도록 설득하기 위해 마지막으로 노력할 것입니다. 당신은 당신의 아이디어를 향상시킬 방법을 물었고, 당신이 할 수있는 최선의 개선은 그것을하지 않는 것입니다.

$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 
    } 
}; 

그들은 거의 동일있어이

여기가 Kohana에서 설정 파일의 PHP 버전입니다. 나는 네가 얻고있는 것을 정말로 보지 못한다.

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 파일에서 가져옵니다 내 솔루션,하지만 다른 뭔가로 대체 할 수 있습니다.