Php 从文本文件中读取复杂结构并放入数据库
我在文本文件中具有以下结构:Php 从文本文件中读取复杂结构并放入数据库,php,text,Php,Text,我在文本文件中具有以下结构: class Thing1 { pos[]={120.03,121,134.0987}; heading=-92.049; anotherthing=19; foo="thing"; kind="This_item"; foo=0.293333; foo="this thing"; }; class Thing2 { ... } 我想用PHP文档阅读我网站上的结构,并将其放入数据库中。我需要有“pos[]”、
class Thing1
{
pos[]={120.03,121,134.0987};
heading=-92.049;
anotherthing=19;
foo="thing";
kind="This_item";
foo=0.293333;
foo="this thing";
};
class Thing2
{
...
}
我想用PHP文档阅读我网站上的结构,并将其放入数据库中。我需要有“pos[]”、“heading”和“kind”值,并需要将它们添加到一行中。那么,我怎样才能得到这些值,并将它们转换成一个变量,以便使用它们呢
谢谢
$FileArray = file("yourfile.txt");
$QueryArray = array();
foreach($FileArray as $Line) {
if (count($LineArray = explode('=', $Line)) > 1) {
$QueryArray[$LineArray[0]] = trim($LineArray[1], ";");
}
}
从那里,您可以执行检查并构建查询,根据需要将值插入数据库。大概是这样的:
$QueryString = "INSERT INTO {$DbName} (";
foreach($QueryArray as $Key=>$Val) {
if ($Key == "whatever") {
$KeyStr .= $Key.', ';
$ValStr .= $Val.', ';
}
}
$KeyStr = trim($KeyStr, ", ");
$ValStr = trim($ValStr, ", ");
QueryString .= "{$KeyStr}) VALUES ({$ValStr});"
从那里,您可以执行检查并构建查询,根据需要将值插入数据库。大概是这样的:
$QueryString = "INSERT INTO {$DbName} (";
foreach($QueryArray as $Key=>$Val) {
if ($Key == "whatever") {
$KeyStr .= $Key.', ';
$ValStr .= $Val.', ';
}
}
$KeyStr = trim($KeyStr, ", ");
$ValStr = trim($ValStr, ", ");
QueryString .= "{$KeyStr}) VALUES ({$ValStr});"
我制作了以下解决方案:
$lines = file('your_file.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($lines as $ky => $line) {
$lines[$ky] = explode('=',$line);
$lines[$ky][0] = trim($lines[$ky][0]);
if (isset($lines[$ky][1])) {
$lines[$ky][1] = trim($lines[$ky][1], '";\'{}');
}
}
foreach($lines as $line){
if ($line[0] == 'pos[]') {
echo 'pos[] = ' . $line[1]; //echoing post[] value
}
if ($line[0] == 'kind') {
echo 'kind = ' . $line[1]; //echoing kind value
}
if ($line[0] == 'heading') {
echo 'heading = ' . $line[1]; //echoing heading value
}
}
我已经用您的示例文本对它进行了测试,它做得很好:-)我制作了以下解决方案:
$lines = file('your_file.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($lines as $ky => $line) {
$lines[$ky] = explode('=',$line);
$lines[$ky][0] = trim($lines[$ky][0]);
if (isset($lines[$ky][1])) {
$lines[$ky][1] = trim($lines[$ky][1], '";\'{}');
}
}
foreach($lines as $line){
if ($line[0] == 'pos[]') {
echo 'pos[] = ' . $line[1]; //echoing post[] value
}
if ($line[0] == 'kind') {
echo 'kind = ' . $line[1]; //echoing kind value
}
if ($line[0] == 'heading') {
echo 'heading = ' . $line[1]; //echoing heading value
}
}
我已经用您的示例文本对其进行了测试,结果很好:-)我为此问题编写了一个函数:
<?php
$array = parse_my_file("file.txt");
print_r($array);
function parse_my_file($file){
if(file_exists($file)){
$data = file_get_contents($file);
$class = explode("class ", $data);
unset($class[0]);
$class_sanitized = array_map(function($v){
$temp = explode(PHP_EOL . "{" . PHP_EOL, substr($v, 0, -4), 2);
$temp[1] = array_filter(explode(PHP_EOL, $temp[1]));
$temp[1] = array_map(function($w){
$value = explode("=", trim(substr($w, 0,-1), " "));
return($value);
}, $temp[1]);
return($temp);
}, $class);
$return_array = array();
foreach($class_sanitized as $value){
$return_array[$value[0]] = array_map(function($z){
if(substr($z[1], 0, 1) == '"' AND substr($z[1], -1) == '"'){
$z[1] = substr($z[1], 1, -1);
}
return(array($z[0] => $z[1]));
}, $value[1]);
}
return $return_array;
}else{
return array("Deze bestand bestaat niet");
}
}
?>
要回显值,请执行以下操作:
echo $array["Thing1"][2]["anotherthing"]; // Result 19
希望这有帮助。我为此问题编写了一个函数:
<?php
$array = parse_my_file("file.txt");
print_r($array);
function parse_my_file($file){
if(file_exists($file)){
$data = file_get_contents($file);
$class = explode("class ", $data);
unset($class[0]);
$class_sanitized = array_map(function($v){
$temp = explode(PHP_EOL . "{" . PHP_EOL, substr($v, 0, -4), 2);
$temp[1] = array_filter(explode(PHP_EOL, $temp[1]));
$temp[1] = array_map(function($w){
$value = explode("=", trim(substr($w, 0,-1), " "));
return($value);
}, $temp[1]);
return($temp);
}, $class);
$return_array = array();
foreach($class_sanitized as $value){
$return_array[$value[0]] = array_map(function($z){
if(substr($z[1], 0, 1) == '"' AND substr($z[1], -1) == '"'){
$z[1] = substr($z[1], 1, -1);
}
return(array($z[0] => $z[1]));
}, $value[1]);
}
return $return_array;
}else{
return array("Deze bestand bestaat niet");
}
}
?>
要回显值,请执行以下操作:
echo $array["Thing1"][2]["anotherthing"]; // Result 19
希望这有帮助。你从哪里读到这篇文章?档案?请求参数?还有别的吗?还有,你自己试过什么吗?发布您的尝试。@BenLee:我正在从服务器上的文件中读取此内容。我不知道如何在PHP中准确处理文本文件。我知道如何读取文件并获取其完整内容,但不知道如何执行我所要求的操作。
file\u get\u contents()
,explode()
,trim()
应该这样做job@HamZaDzCyberDeV你能在回答中进一步解释一下吗?我必须承认,总的来说,我不是PHP的高手。我知道这些函数的作用,但我不知道如何一起处理它们。你从哪里读到的?档案?请求参数?还有别的吗?还有,你自己试过什么吗?发布您的尝试。@BenLee:我正在从服务器上的文件中读取此内容。我不知道如何在PHP中准确处理文本文件。我知道如何读取文件并获取其完整内容,但不知道如何执行我所要求的操作。file\u get\u contents()
,explode()
,trim()
应该这样做job@HamZaDzCyberDeV你能在回答中进一步解释一下吗?我必须承认,总的来说,我不是PHP的高手。我知道这些函数的作用,但我不知道如何一起处理它们。这非常适合我想要的,谢谢。这非常适合我想要的,谢谢。