私は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 の読み取り部分の単純なダッシュのみですが、コードは同じで、クエリのみが含まれます。すばらしい parse_ini_file() 関数を紹介してくれた @leepowers に感謝します。
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>";
}
}
}