我从我的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"
},
}
正如您所看到的,我能够访问上面需要这些循环的所有数据。
我不知道该怎么做是使用该文件格式写入文件。 (在正确的位置插入title
,keys
,values
。
答案 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] =>
)
)
在线试用
正如您所看到的,这些列的顺序与map
的顺序正确,而缺少的一个non-dbKey
则为空值,额外的dbKey4
将被删除。
但是你必须有办法告诉程序this_field = that_field
。只是使用不同的密钥然后使用DB数组来获取其中包含一些JSON的文件,程序如何知道this_field = that_field
?很简单,除非你说出来,否则它是不可能的。没有什么神奇的猜测我在PHP中的功能。