提问者:小点点

将大字符串切割成对象


我有一个来自服务器的巨大字符串,我希望每一行都作为一个对象(用于后面的foreach循环)。

这是字符串的一部分:

1535;;34290;;teaserbanner_881.jpg;;Not allowed;;closed;;;;closed;;
1535;;34291;;teaserbanner_8832.jpg;;Not allowed;;closed;;;;closed;;
1379;;31912;;teaserbanner_844.jpg;;Allowed;;open;;;;open;;
1379;;31913;;teaserbanner_8422.jpg;;allowed;;closed;;;;closed;;

每行唯一保持不变的是“结束标记”
只有两个选项:

  1. ;;关闭;;;;关闭;
  2. ;;打开;;;打开;

我在想它应该是爆炸针或者一些正则表达式。。。

最终输出应为:

element[0]  1535;;34290;;teaserbanner_881.jpg;;Not allowed;;closed;;;;closed;;
element[1]  1535;;34291;;teaserbanner_8832.jpg;;Not allowed;;closed;;;;closed;;
element[2]  1379;;31912;;teaserbanner_844.jpg;;Allowed;;open;;;;open;;
element[3]  1379;;31913;;teaserbanner_8422.jpg;;allowed;;closed;;;;closed;;    

字符串不是“行”的,而是一条大的行。


共3个答案

匿名用户

您可以使用preg_match_all函数

$s = <<< EOF
1535;;34290;;teaserbanner_881.jpg;;Not allowed;;closed;;;;closed;;
1535;;34291;;teaserbanner_8832.jpg;;Not allowed;;closed;;;;closed;;
1379;;31912;;teaserbanner_844.jpg;;Allowed;;open;;;;open;;
1379;;31913;;teaserbanner_8422.jpg;;allowed;;closed;;;;closed;;
EOF;

if (preg_match_all('~(.*?;;(open|closed);{4}\2;;)~', $s, $arr))
   print_r($arr[1]);
Array
(
    [0] => 1535;;34290;;teaserbanner_881.jpg;;Not allowed;;closed;;;;closed;;
    [1] => 1535;;34291;;teaserbanner_8832.jpg;;Not allowed;;closed;;;;closed;;
    [2] => 1379;;31912;;teaserbanner_844.jpg;;Allowed;;open;;;;open;;
    [3] => 1379;;31913;;teaserbanner_8422.jpg;;allowed;;closed;;;;closed;;
)

匿名用户

请看一下splitsplit(“\n”,$string)将为您提供一个数组,其中每个条目都是字符串的一行。

匿名用户

你可以使用file()来实现:-

$lines = file('path/to/file');
foreach($lines as $line){
    //do something with $line
}

$lines是一个数组,每个元素表示文件中的一行,以便

var_dump($lines);

会给出类似于:-

array (size=4)
  0 => string '1535;;34290;;teaserbanner_881.jpg;;Not allowed;;closed;;;;closed;;' (length=68)
  1 => string '1535;;34291;;teaserbanner_8832.jpg;;Not allowed;;closed;;;;closed;;    ' (length=69)
  2 => string '1379;;31912;;teaserbanner_844.jpg;;Allowed;;open;;;;open;;    ' (length=60)
  3 => string '1379;;31913;;teaserbanner_8422.jpg;;allowed;;closed;;;;closed;;' length=63)