通过JSON字符串使用PHP逐行读取

通过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. (如果你想知道,这是我即将推出的粉丝网站的一部分,仍在建设中) 这个句子从第

我正在尝试创建一个PHP函数,它允许我使用JSON字符串从文本文件中读取选定的行。JSON字符串由两个用逗号分隔的数字组成。第一个数字是我要查找的行数,第二个是向下读取的行数

例如,我在一个单独的文本文件中有这样一句话:

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";