我最近开始使用PHP并尝试从.txt创建列表但是删除了所有不必要的组件。 一条线得到了这个
item = 0 egg came_from_chicken
我想删除item =
和came_from_chicken
,0 egg
留给我substr()
。
现在经过一些搜索,我发现strtok()
删除了每行的前5个字符。之后我还发现<?php
$lines = file('../doc/itemlist.txt');
$newf = array();
foreach ($lines as $line) {
$newf[] = strtok($line, "\t") . "\t" . strtok("\t");
}
var_dump($newf);
?>
可以在第二个标签后删除其他不需要的文字。不幸的是我无法将这些结合起来所以我的问题是:如何从每一行中删除前5个字符并从每行删除第二个标签后的所有内容?
到目前为止我已经知道了这一点:
egg
此功能类似于删除item =
之后的所有内容,但仍需删除Task
。
答案 0 :(得分:0)
此方法适用于=
符号前面的任何字符串。
foreach ($lines as $line) {
$newf[] = implode("\t", array_slice(explode("\t", trim(explode('=', $line, 2)[1])), 0, 2));
}
答案 1 :(得分:0)
快速而肮脏的方法就是将它全部包装起来:
$newf[] = substr(strtok($line, "\t") . "\t" . strtok("\t"), 5);
但是,我个人不喜欢 strtok()
(无法解释原因,我只是不喜欢它)。如果您不需要从第二个标签中删除所有内容,但是从最后标签中删除(在您的示例中,第二个标签是最后一个标签页),将使用strrpos()
查找最后一个标签的位置,并将其转储到substr()
:
$newf[] = substr($line, 5, strrpos($line, "\t")-5);
-5
是为了补偿你从头开始剥离的5个字符。如果您需要从字符6而不是5开始,您还应该从strrpos()
返回中减去6。
编辑别介意整个最后一部分,我刚看到您发布的示例格式,而您确实需要第二个标签而不是最后一个标签。
答案 2 :(得分:0)
您可以使用正则表达式:
<?php
$lines = file('./file.txt');
$newf = array();
foreach ($lines as $line) {
$newf[] = preg_replace('/.*=\s*(.*)\t.*/s', '$1', $line);
}
var_dump($newf);
输出:
array(1) {
[0]=>
string(5) "0 egg"
}
答案 3 :(得分:0)
假设您将收到与您提供的示例类似的模式。
你可以做一个简单的行:
$str = "item = 0 egg came_from_chicken";
$parts = preg_split('/\s+/', $str);
echo $parts[2] . $parts[3];
答案 4 :(得分:0)
我知道这不是您正在寻找使用strtok的答案,但我相信下面的代码会更容易:
<?php
$lines = '../doc/itemlist.txt';
// array to store all data
$newf = array();
foreach ($lines as $line) {
// you can do an explode which will turn it into an array and you can then get any values you want
// $newf [] = strtok ($line, "\t") . "\t" . strtok("\t"); // throw away
// lets say we use [item = 0 egg came_from_chicken] as our string
// we split it into an array for every tab or spaces found
$values = preg_split ('/\s+/', $line);
//returns
// Array
// (
// [0] => item
// [1] => =
// [2] => 0
// [3] => egg
// [4] => came_from_chicken
// [5] =>
// )
// lastly store your values which would be sub 2 and sub 4
$newf [] = $values [2] . ' ' . $values [3];
}
var_dump($newf);
// return
// array (size=3)
// 0 => string '0 aaa' (length=5)
// 1 => string '1 bbb' (length=5)
// 2 => string '2 ccc' (length=5)
?>