Anahtar sınırlandırmak için en etkili yolu

3 Cevap php

PHP, 0123-4567-8901-2345: gibi setleri içine sınırlandırmak için en etkili yolu nedir ben 16 sayısal karakter (yani 0123456789012345) bir dize var demek?

Not: Ben acı yavaş varolan sistemi yeniden duyuyorum.

3 Cevap

Kullan str_split():

$string = '0123456789012345';
$sets = str_split($string, 4);
print_r($sets);

Çıktı:

Array
(
    [0] => 0123
    [1] => 4567
    [2] => 8901
    [3] => 2345
)

Sonra tabii ki birlikte setleri sadece implode() Bunların arasında tire eklemek için:

echo implode('-', $sets); // echoes '0123-4567-8901-2345'

(Örn. telefon numaraları için) daha esnek bir yaklaşım arıyorsanız, düzenli ifadeler deneyin:

preg_replace('/^(\d{4})(\d{4})(\d{4})(\d{4})$/', '\1-\2-\3-\4', '0123456789012345');

Eğer göremiyorsanız, ilk argüman dört basamak, her dört grup kabul eder. İkinci argüman, onları biçimlendiren ve üçüncü argüman sizin girişidir.

Bu biraz daha genel:

<?php

// arr[string] = strChunk(string, length [, length [...]] );
function strChunk() {
    $n = func_num_args();
    $str = func_get_arg(0);
    $ret = array();

    if ($n >= 2) {
    	for($i=1, $offs=0; $i<$n; ++$i) {
    		$chars = abs( func_get_arg($i) );
    		$ret[] = substr($str, $offs, $chars);
    		$offs += $chars;
    	}
    }

    return $ret;
}

echo join('-', strChunk('0123456789012345', 4, 4, 4, 4) );

?>