Ayrıştırma PHP Dize Karakterler sayısı Dayalı

3 Cevap php

Ben bir dize alır, küçük bir senaryo üzerinde çalışmaya başlıyorum, karakter sayısını sayar, sonra, karakter sayısına göre, böler / apart dize kırar ve bir anda / e-postalar 110 karakter gönderir.

Ne için kullanmak uygun mantık / PHP olacaktır:

1) Count the number of characters in the string
2) Preface each message with (1/3) (2/3) (3/3), etc...
3) And only send 110 characters at a time.

Ben muhtemelen karakterleri saymak strlen kullanmak zorunda biliyorsun, ve döngü döngü bazı tip yoluyla, ama ben bu konuda gitmek nasıl emin değilim.

Teşekkürler!

3 Cevap

Eğer dizeleri kırmak nerede ile ilgili değil iseniz, str_split kullanabilirsiniz.

Bu ile ilgili (ve, diyelim ki, bir boşluklarla yalnızca bölmek istiyorum) else if, gibi bir şey yapabilirsiniz:

// $str is the string you want to chop up.
$split = preg_split('/(.{0,110})\s/',
                    $str,
                    0,
                    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

Bu dizi daha sonra basitçe yapabilirsiniz:

$count = count($split);
foreach ($split as $key => $message) {
    $part = sprintf("(%d/%d) %s", $key+1, $count, $message);
    // $part is now one of your messages;
    // do what you wish with it here.
}

kullanmak str_split() ve sonuçta elde edilen dizinin üzerinde yineleme.

Başımın üstünden, olduğu gibi çalışması gerektiğini, ancak zorunda değildir. Mantık olsa ok.

foreach ($messages as $msg) {

  $len = strlen($msg);

  if ($len > 110) {
    $parts = ceil($len / 100);
    for ($i = 1; $i <= $parts; $i++) {
      $part = $i . '/' . $parts . ' ' . substr($msg, 0, 110);
      $msg = substr($msg, 109);
      your_sending_func($part);
    }

  } else {
    your_sending_func($msg);
  }

}