dizi değerleri içine belirli bir dize dönüştürme php

1 Cevap php

i sunucudan bu cevabı alıyorum:

OK: 0; Sent queued message ID: e3674786a1c5f7a1 SMSGlobalMsgID:6162865783958235 OK: 0; Sent queued message ID: 9589936487b8d0a1 SMSGlobalMsgID:6141138716371692 

ve böylece ...

This is just one long string with NO carriage return i copied it exactly as received. please note, initial OK can be a different word as well as 0 (at the beginning of the string) can be upto 3 digits number.

Bu tekerrür desen:

OK: 0; Sent queued message ID: e3674786a1c5f7a1 SMSGlobalMsgID:6162865783958235

Ben bu gibi görünen bir diziye dönüştürmek istiyorum:

Array
(
    [0] => Array
           [1] => OK
           [2] => 0
           [3] => e3674786a1c5f7a1
           [4] => 6162865783958235

    [1] => Array
           [1] => OK
           [2] => 0
           [3] => 9589936487b8d0a1
           [4] => 6141138716371692 
)

Bunu nasıl hakkında gitmek istiyorsunuz? Ben katkılarınıza teşekkür ederiz.

1 Cevap

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 , "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 ()


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)