数据包含
在网站的限制区域中,我有一个具有5个字段(姓名、地址、电话号码、性别和参观展览)的 HTML5 表单,通过POST方法将数据发送给 PHP 中的一个函数,并使用 fwrite
命令将其写入给定的文本文件中:
fwrite ($pointer, "$name | $addres | $telephone | $sex | $exhibitions " .PHP_EOL);
正如您所见,它在一个文本文件中写入了表单中输入的数据,以及一个换行符。指针是fopen
用于打开我需要处理的文件的变量。输出示例:
Márcio Aguiar | Belmiro Braga Street | 1234-5678 | M | Planets of Solar System
Joana Tobias | Santos Dummont Avenue | 8765-4321 | F | Black Holes, Satellites
数据查询
然后是一个查询系统。它有一个循环,直到文件结束为止。在这个循环中,有一个名为$buffer
的变量,每次获取txt文件的一行内容。然后将其explode
以创建一个名为$lines[$counter]
的数组。为了漂亮地打印它,我使用了一个array_combine
,在其中将另一个数组($keys
)中的字段名称与$lines[$counter]
中写入的值结合起来,并将其赋值给$combined[$counter]
。然后循环结束,我在<pre></pre>
中使用print_r
来查看写入$combined
的数据,同时保留HTML会忽略的空格和换行符。以下是代码:
$keys = array ("Name", "Address", "Telephone", "Sex", "Visited exhibition");
for ($counter=0;!feof($reader);$counter++){
$buffer = fgets($reader);
$lines[$counter] = explode(" | ", $buffer);
$combined[$counter] = array_combine($keys, $lines[$counter]);
}
echo "<pre>";
print_r($combined);
echo "</pre>";
输出示例:
Array
(
[0] => Array
(
[Name] => Márcio Aguiar
[Address] => Belmiro Braga Street
[Telephone] => 1234-5678
[Sex] => M
[Visited exhibitions] => Planets of Solar System
)
[1] => Array
(
[Name] => Joana Tobias
[Address] => Santos Dummont Avenue
[Telephone] => 8765-4321
[Sex] => F
[Visited exhibitions] => Black Holes, Satellites
)
[2] =>
)
在这里,您可以看到创建了一个空的 2
数组。这是由上面的表单插入的最后一行换行符引起的。我需要删除这个最后的换行符,但不知道如何操作。我想要知道!不知道会导致当执行到 array_combine
时出现错误,因为两个数组必须具有相同数量的元素,而 2
是空的。以下是错误提示:
警告:array_combine():参数应该具有相等数量的元素,在 E:\Aluno\Documents\Wamp\www\trab_1\area_restrita\consulta.php 的第60行
trim
,你能解释一下吗? - user4863385trim
。只需按照答案中的说明以追加模式打开文件即可。 - Mikefopen
上使用了a
。删除PHP_EOL
会使不同人的数据都插入到一行中,但我需要将信息分布在许多行上,每个人占一行。 - user4863385$contents = trim(file_get_contents($file));
这行代码时,你通过使用file_get_contents()
获取了文件的全部内容,然后通过使用trim()
去除了所有的\n
,并将结果赋值给了$contents
,对吗? 那么为什么之后你又使用了$lines = explode("\n", $contents);
这行代码呢?我理解这行代码是将$contents
按照\n
分割成子字符串,并通过explode()
将这个字符串矩阵赋值给了$lines
... 但是既然你已经使用trim()
去除了所有的\n
,为什么还要在explode()
中使用参数\n
呢? - user4863385trim()
只会删除第一个和最后一个空格字符。所以如果你有{tab}line one{line break}line two{space}{line break}
,它会将其转换为line one{line break}line two
。它不会去除 每个 换行符,只有在开头或结尾有换行符时才会去除。我使用explode()
将字符串拆分成一个数组,其中每一行都是数组中的一个值,这样我就可以循环遍历它了。 - Mikeexplode
和循环:strtok
。你也可以看看这个。 - Mike