仅爆炸第一个'='

时间:2016-11-25 18:50:36

标签: php explode

我需要爆炸一个包含很多行的.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';
            }
        }
    }
}
?>

1 个答案:

答案 0 :(得分:1)

我认为明显而简单的方法是分别处理每一行,然后使用设置为=的{​​{1}}参数在$limit上展开,这意味着它只会在第一个2上分开。

=

现在您将拥有一个类似的数组:

$lines = explode("\n", $data);
$settings = array();
foreach ($lines as $line) {
    $settings[] = explode("=", $line, 2);
}

这当然只有在您的所有值都只在一行上时才有效。如果您有换行符,那么您将进入一个更复杂的解析世界,您可能需要构建某种标记器。