从另一个文件创建一个Json文件作为模型

时间:2018-04-06 20:45:25

标签: php json

我从我的Values获取数据库中的数据,该数据将用作Keys file.json的{​​{1}}。我已经有一个"模型文件",我需要在dinamycally创建另一个,使用相同的键但具有不同的valeus(从DB带来)。

基本上,我需要做的是从现有文件中读取密钥,并使用数据库数据填充这些密钥的值。

 //Open model file
 $myFile  = fopen($fileName, "r") or die("Unable to open the file !");
 //$content = file content
 $content = json_decode(fread($myFile, filesize($fileName)));
 fclose($myFile); //Close the file

 foreach( $content as $keys => $value ) {         

    foreach( $value as $key) {
       //....
    }
 }

文件格式如下:

{
    "title1": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
     },
     "title2": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"      
     },
} 

正如您所看到的,我能够访问上面需要这些循环的所有数据。 我不知道该怎么做是使用该文件格式写入文件。 (在正确的位置插入titlekeysvalues

1 个答案:

答案 0 :(得分:0)

如果我可以称之为严重缺陷,那么你的方法。您正在做的所有事情,或者您正在做的所有事情都是循环来自其中包含JSON数据的文件中的数据。也许这是神秘的"model file",但目前尚不清楚。也许它是你想要的格式的一个例子。我应该怎么知道。

在任何情况下,你都没有给出足够的信息来给出具体答案,所以我会给出一般的答案。

假设你可以使用PDO,更具体地说是PDO :: FETCH_GROUP,我们可以用它来处理标题。然后,对于映射,我将构建一个映射数组并执行类似的操作(使用固定数据):

$map = [
         'modelKey' =>  'dbKey',
         'modelKey3' =>  'dbKey3',
         'modelKey1' =>  'dbKey1',
         'modelKey2' =>  'dbKey2',
         'modelKey4' =>  'non-dbKey', //not in db
    ];

 $dbResults = [

     'title1' => [
         'dbKey' => 'value',
         'dbKey1' => 'value1',
         'dbKey2' => 'value2',
         'dbKey3' => 'value3',
         'dbKey4' => 'value4', //not in map
    ]
 ];


 $blank = array_fill_keys($map, '');
 $result = [];

 foreach($dbResults as $key => $row){
     //adds any keys in from $blank not in $row
     $mapped = array_replace($blank, $row);
     //removes any keys from row that are not in blank
     $mapped = array_intersect_key($mapped, $blank);
     $result[$key] = $mapped;
 }

 print_r($result);

输出

Array (
    [title1] => Array (
        [dbKey] => value
        [dbKey3] => value3
        [dbKey1] => value1
        [dbKey2] => value2
        [non-dbKey] => 
    )
)

在线试用

https://3v4l.org/g4YI1

正如您所看到的,这些列的顺序与map的顺序正确,而缺少的一个non-dbKey则为空值,额外的dbKey4将被删除。

但是你必须有办法告诉程序this_field = that_field。只是使用不同的密钥然后使用DB数组来获取其中包含一些JSON的文件,程序如何知道this_field = that_field?很简单,除非你说出来,否则它是不可能的。没有什么神奇的猜测我在PHP中的功能。