我是 PHP 新手,正在尝试解析 txt 文件中的某些文本,然后将文本插入 MySQL 数据库。所以,让我们更具体一点。文件的格式就是这样,并且通过文档结尾重复。椭圆代表上一个音调和下一个音调。
...
[Tone27]
Atone = 707.3
Btone = 746.8
Btonelength = 3
Btonedebounce = 1
Description = Fire Department 1
mp3_Emails = email@address.com,email2@address.com,email3@address.com
amr_Emails = email2@textmessaging.com,email1@textmessaging.com
alert_command = c:\test.bat
post_email_command = c:\test2.bat
radio_frequency = 154.475
exclude_from = 13:25
exclude_to = 13:35
exclude_emails = email2@textmessaging.com,email2@address.com
...
我想要做的是解析文件中每个“音块”中的第一项(例如'[tone27]')并将其插入到数据库中新行的第一个字段中。然后,我需要评估每一行的“=”之前的内容,例如“Atone”,并将该行的“=”之后的内容,例如“707.3”插入到该名称的字段中。因此,该行在数据库中可能如下所示:
$id | [tone27] | 707.3 |746.8 | 3 | 1 | Fire Department 1 |email1@x.com,email2@x.com,e...|...
等等...
我已经能够通过执行字符串函数来隔离每一件事,但我不确定如何设置一个可以正确插入每个值的循环。这是我用来隔离它们的代码,但它对实际将它们放入数据库没有任何帮助。
$txt_file = file_get_contents('config/tones.txt');
$rows = explode("\n", $txt_file);
foreach($rows as $row => $data)
{
$row_data = explode(' = ', $data);
if ((isset($row_data[0])) && ($row_data[0] !== " " )){
$info[$row]['attribute'] = $row_data[0];
$info_attribute = trim($info[$row]['attribute']);
}
if (isset($row_data[1])){
$info[$row]['value'] = $row_data[1];
$info_value = trim($info[$row]['value']);
//display data
echo 'Row ' . $row . ' Attribute: ' . $info_attribute . '<br />';
echo 'Row ' . $row . ' Value: ' . $info_value . '<br />';
} elseif (($info[$row]['attribute']) && (!empty($info_attribute))) {
echo "<br>";
echo 'Row ' . $row . ' Attribute: ' . $info_attribute . '<br />';
continue;
}
我是菜鸟,毫无疑问。我迷路了。在此先感谢您的帮助!!!
****|| EDIT ||****
感谢所有出色的答案!这就是我最终想出的。还没有查询,只是 CRUD 的读取部分的简单破折号,但代码将是相同的,只有查询。非常感谢@leepowers 向我介绍了精彩的 parse_ini_file() 函数。
foreach(parse_ini_file("config/tones.txt", true) as $k => $v){
extract($v, EXTR_SKIP);
echo "<br>";
echo $k . "<br>";
foreach($v as $sv => $ssv){
$lcase_sv = strtolower($sv);
if (trim($lcase_sv) == 'amr_emails'){
echo "sv: amr_Emails:<br>";
echo "ssv:<br>";
$eA = explode(',', trim($ssv));
foreach($eA as $eK => $eV){
echo "email" . filter_var($eK + 1, FILTER_SANITIZE_NUMBER_INT) . ": " . $eV . "<br>";
}
} elseif (trim($lcase_sv) == 'mp3_emails'){
echo "ssv:<br>";
$eA = explode(',', trim($ssv));
foreach($eA as $eK => $eV){
echo "email" . filter_var($eK + 1, FILTER_SANITIZE_NUMBER_INT) . ": " . $eV . "<br>";
}
}else {
echo "sv: " . $sv .", " . "s: " . $ssv . "<br>";
}
}
}