通过JSON字符串使用PHP逐行读取
我正在尝试创建一个PHP函数,它允许我使用JSON字符串从文本文件中读取选定的行。JSON字符串由两个用逗号分隔的数字组成。第一个数字是我要查找的行数,第二个是向下读取的行数 例如,我在一个单独的文本文件中有这样一句话:通过JSON字符串使用PHP逐行读取,php,json,for-loop,explode,line-by-line,Php,Json,For Loop,Explode,Line By Line,我正在尝试创建一个PHP函数,它允许我使用JSON字符串从文本文件中读取选定的行。JSON字符串由两个用逗号分隔的数字组成。第一个数字是我要查找的行数,第二个是向下读取的行数 例如,我在一个单独的文本文件中有这样一句话: A diving spiral attack in which Pikachu head butts downward while being surrounded by electricity. (如果你想知道,这是我即将推出的粉丝网站的一部分,仍在建设中) 这个句子从第
A diving spiral attack in which Pikachu head butts downward while
being surrounded by electricity.
(如果你想知道,这是我即将推出的粉丝网站的一部分,仍在建设中)
这个句子从第6行开始,用了2行。所以在我的JSON文件中,我会写“6,2”。explode()命令使用逗号作为分隔符运行,允许我将这些数字存储到两个单独的变量中,$start和$length
$result = explode(",", $sample); // In JSON string, $sample is $i["desc"]
$start = $result[0];
$length = $result[1];
现在变量就位后,将调用以下行来执行实际的逐行提取
$file = new SplFileObject("pikachu/pikachu.txt");
for ($i = $start; $i <= ($start+$length); $i++) {
$file->seek($i-1);
echo "$file";
}
问题出在这个函数中,与JSON的使用无关。这只是一个简单的变量范围问题
function descrw ($desc) {
$result = explode(",", $desc);
$start = $result[0];
$length = $result[1];
$file = new SplFileObject("$name/$name.txt");
for ($i = $start; $i <= ($start+$length); $i++) {
$file->seek($i-1);
echo "$file";
}
return(0);
}
然后更改调用它以传递参数的位置:
echo " <DIV class=\"Details\">" . descrw($desc, $name) . "</DIV></TD>\n";
echo”“。descrw($desc,$name)。“\n”;
6,2
不是有效的JSON。JSON数组应该是[6,2]
@Barmar我需要把括号放在JSON文件的字符串中吗?现在,我把它列为“desc”:“6,2”。当您到达SplFileObject
时,如何设置$start
和$length
应该无关紧要。失败版本中的错误消息表示您正在尝试打开/.txt
,而不是/pikachu/pikachu.txt
,请不要介意我之前的评论,那是在发布代码之前。我以为你的意思是6,2
是JSON文件的内容。虽然如果你的JSON是“desc:[6,2]
,似乎会更好,但是你不需要使用explode
(为回复晚表示歉意,正在修复代码的格式),修复确实有帮助。剩下我要做的就是修改最后一部分,让它出现在白框中。如果你在演示中点击移动名称,你会看到一个白色的DIV。不幸的是,文本被贴在了它的外面。我可以通过修改返回代码来修复它,但它只给了我一行,如演示中所示。descrw
应该返回字符串,而不是回显它本身,这样连接就可以正常工作了。就是这样!我已经为其他CSS类(普通、特殊、超、最终)更新了PHP字符串。我对PHP知之甚少(比如:echo和变量保存之类的初学者),但我以前从未做过这样的高级工作。知道S.O.是一个巨大的救命恩人,我松了一口气。谢谢,巴玛。我们。。。我有个问题。代码在测试中起作用,但在真实的东西上不起作用。出现了一个新的错误。我将从我的MCP根文件夹而不是测试文件夹中发布真正的代码,因为这些代码将被删除。听起来characters
目录不是您认为的位置。代码希望它是包含脚本的目录的子目录。
function descrw ($desc) {
$result = explode(",", $desc);
$start = $result[0];
$length = $result[1];
$file = new SplFileObject("$name/$name.txt");
for ($i = $start; $i <= ($start+$length); $i++) {
$file->seek($i-1);
echo "$file";
}
return(0);
}
function descrw ($desc, $name) {
$result = explode(",", $desc);
$start = $result[0];
$length = $result[1];
$file = new SplFileObject("$name/$name.txt");
$result = '';
for ($i = $start; $i <= ($start+$length); $i++) {
$file->seek($i-1);
$result .= $file;
}
return($result);
}
echo " <DIV class=\"Details\">" . descrw($desc, $name) . "</DIV></TD>\n";