1

サーバーからの巨大な文字列があり、各行をオブジェクトとして使用したい (後で 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;;

各行で変わらないのは、「終了タグ」
の 2 つのオプションだけです。

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

文字列は「行」ではなく、1 つの大きな行です。

4

5 に答える 5

1

以下を利用できますpreg_match_all function

$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;;
)
于 2013-10-02T14:51:04.063 に答える
1

使ってみてくださいpreg_split:

$array = preg_split('/(?<=;;closed;;;;closed;;|;;open;;;;open;;)(?!$)/', $string)

(?<=;;closed;;;;closed;;|;;open;;;;open;;)分割点の前に終了タグがあること(?!$)を確認し、文字列が最後で分割されていないことを確認します。

viper7 デモ

于 2013-10-02T15:21:25.137 に答える
1

splitをご覧ください。split("\n", $string)各エントリが文字列の1行である配列が得られます。

于 2013-10-02T14:43:08.947 に答える
1

これには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)
于 2013-10-02T14:43:41.047 に答える