2009-08-30 6 views
1

Je commence à travailler sur un petit script qui prend une chaîne, compte le nombre de caractères, puis, en fonction du nombre de caractères, divise/brise la chaîne et envoie/emails 110 caractères à la fois.Parse PHP String basé sur le nombre de caractères

Quelle serait la bonne logique/PHP pour:

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. 

Je sais que je devrais probablement utiliser strlen pour compter les caractères, et un certain type de boucle à boucle à travers, mais je Je ne sais pas trop comment s'y prendre.

Merci!

+0

S'il vous plaît montrer quel code vous avez déjà, cela se lit comme une spécification de ce que vous voulez que quelqu'un d'autre à écrire pour vous. –

+0

En fait, pas vraiment - n'ont pas écrit de code. Juste essayer de comprendre la logique et les fonctions les plus efficaces à utiliser. – Dodinas

Répondre

1

Vous pouvez utiliser str_split, si vous n'êtes pas concerné par où vous briser les chaînes.

Sinon, si vous êtes concernés par cette (et que vous voulez, par exemple, diviser seulement sur un espace), vous pouvez faire quelque chose comme:

// $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); 

Avec ce tableau, vous pouvez alors simplement:

$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. 
} 
+0

Merci, Sebastian. J'aime votre méthode, mais il semble qu'avec le preg_split, peu importe le nombre de caractères que je mets (plus de 110), cela crée un tableau de seulement 2, quand (dans la plupart des cas) il devrait être 3 ou plus. Des idées? – Dodinas

+0

Mon mauvais; fixé l'expression régulière au travail. Devrait faire le travail désiré maintenant. –

+0

Merci, ce fut une aide précieuse! – Dodinas

0

utilisez str_split() et effectuez une itération sur le tableau résultant.

0

Du haut de ma tête, devrait fonctionner tel quel, mais n'a pas à le faire. La logique est ok cependant.

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

} 
Questions connexes