Eğer girdi olarak bir dize olarak bu veri var düşünüyor:
$str = <<<STR
OK: 0; Sent queued message ID: e3674786a1c5f7a1 SMSGlobalMsgID:6162865783958235
OK: 0; Sent queued message ID: 9589936487b8d0a1 SMSGlobalMsgID:6141138716371692
STR;
A solution would be to explode
that string into separate lines :
$lines = explode("\n", $str);
Edit after the comment and the edit of the OP
Eğer aldığınız verileri göz önüne alındığında tek bir çizgi üzerinde, onu bölmek için başka bir yol bulmak zorundasınız (I think it's easier splitting the data and working on "lines" that working on a big chunk of data at once).
Veriler göz önüne alındığında böyle görünüyor alıyorsanız:
$str = <<<STR
OK: 0; Sent queued message ID: e3674786a1c5f7a1 SMSGlobalMsgID:6162865783958235 OK: 0; Sent queued message ID: 9589936487b8d0a1 SMSGlobalMsgID:6141138716371692
STR;
Ben bu gibi bir regex kullanarak, preg_split
a>, "hatları" bölünmüş olabilir varsayalım:
$lines = preg_split('/SMSGlobalMsgID: (\d+) /', $str);
Eğer çıkış içeriğini denerseniz $lines
, oldukça iyi görünüyor - ve şimdi thoses hatları üzerinde yineleme gerekir.
Sonra boş bir biri olarak $output
dizisi başlatılıyor başlayın:
$output = array();
And you now have to loop over the lines of the initial input, using some regex magic on each line :
See the documentation of preg_match
and Regular Expressions (Perl-Compatible)
for more informations
foreach ($lines as $line) {
if (preg_match('/^(\w+): (\d+); Sent queued message ID: ([a-z0-9]+) SMSGlobalMsgID:(\d+)$/', trim($line), $m)) {
$output[] = array_slice($m, 1);
}
}
Note the portions I captured, using ()
em>
And, in the end, you get the $output
array :
var_dump($output);
İşte bu gibi görünüyor:
array
0 =>
array
0 => string 'OK' (length=2)
1 => string '0' (length=1)
2 => string 'e3674786a1c5f7a1' (length=16)
3 => string '6162865783958235' (length=16)
1 =>
array
0 => string 'OK' (length=2)
1 => string '0' (length=1)
2 => string '9589936487b8d0a1' (length=16)
3 => string '6141138716371692' (length=16)