我需要爆炸一个包含很多行的.txt文件,这些行描述如下:
achievements.levelup.desc=You unlocked the Achievement
achievements.levelup.ok=OK
achievements.levelup.reward=Reward: <b><font size="30" color="#7adde9">%amount%</font></b> %currency_name%
现在的问题是,第三行内的第二个和第三个=
。
它也在那些=
es上爆炸。
我现在如何爆炸,就像这样:
<?php
$array = explode("=", $data, 2);
?>
更新:添加更多代码
的index.php
<?php
require_once('reader.class.php');
?>
<!DOCTYPE html>
<html>
<head>
<title>External Variables Uitlezen</title>
</head>
<body>
<center>
<br><br>
<br><br>
<form action="" method="get">
<label>Hoeveel rijen wil je zien?</label>
<input type="number" name="amount">
<input type="submit" name="enterRows" value="Verder">
</form>
<br><br>
<hr>
<br><br>
<?php
$fileName = "external_flash_texts.txt";
$extReader = new Ext_Var($fileName);
$extReader->SetContent();
if (!isset($_POST['opslaan']) && empty($_POST['opslaan'])) {
if (isset($_GET['enterRows']) && !empty($_GET['enterRows'])) {
echo '<form action="" method="post">';
echo $extReader->GetContent($_GET['amount']);
echo '<input type="submit" name="opslaan" value="Opslaan">';
echo '</form>';
} else {
echo '<form action="" method="post">';
echo $extReader->GetContent(10);
echo '<input type="submit" name="opslaan" value="Opslaan">';
echo '</form>';
}
} else {
$extReader->Save($_POST);
}
?>
</center>
</body>
</html>
reader.class.php
<?php
class Ext_Var {
//File info
private $_fName;
private $_fHandler;
//File content
private $_content = [];
//New file content
private $_newContent;
//Read file
public function __construct($file) {
$this->_fName = $file;
$this->_fHandler = fopen($this->_fName, "r");
}
public function SetContent() {
while ($data = fgets($this->_fHandler)) {
$array = explode("=", $data, 2);
$this->_content[$array[0]] = $array[1];
}
}
public function GetContent($caller) {
$counter = 1;
$content = "";
foreach ($this->_content as $field => $value) {
if ($counter <= $caller) {
$content .= "<p><label>" . $field . "</label> = <input type='text' name='" . $field . "' value='" . $value . "'></p>";
$counter++;
}
}
return $content;
}
public function Save($array) {
if (isset($array) && !empty($array)) {
foreach($this->_content as $field => $value) {
if (isset($array["$field"]) && !empty($array["$field"])) {
$this->_newContent .= $field . "=" . $array["$field"] . "\n";
} else {
$this->_newContent .= $field . "=" . $value;
}
}
if (file_put_contents($this->_fName, $this->_newContent)) {
header("Location: ?msg=Succes");
} else {
echo 'fout';
}
}
}
}
?>
答案 0 :(得分:1)
我认为明显而简单的方法是分别处理每一行,然后使用设置为=
的{{1}}参数在$limit
上展开,这意味着它只会在第一个2
上分开。
=
现在您将拥有一个类似的数组:
$lines = explode("\n", $data);
$settings = array();
foreach ($lines as $line) {
$settings[] = explode("=", $line, 2);
}
这当然只有在您的所有值都只在一行上时才有效。如果您有换行符,那么您将进入一个更复杂的解析世界,您可能需要构建某种标记器。