PHP kullanarak Array Sermaye Mektuplar Alternatif

3 Cevap php

Ben aşağıda gibi bir alfasayısal dize var,

$string_1 = "a4nas60dj71wiena15sdl1131kg12b"

ve aşağıdaki gibi bir şey değiştirmek istiyorum

$string_2 = "a4NaS60dJ71wIeNa15Sdl1131Kg12B"

Bunu nasıl yapıyor hakkında gitmek istiyorsunuz? Ben aşağıdaki kodu denedim ama çalışmıyor.

$lenght = strlen($string_1);

for ( $i = 0; $i <= $length - 1; $i += 1) {

    if ( $i % 2) {

    	$string_2[$i]=strtoupper($string_1[$i]);

    }

    else {

    	$string_2[$i]=$string_1[$i];

    }

}

echo $string_2;

Yukarıdaki kod "Dizi" yani bir şey kesinlikle çalışmıyor yazdırır.

3 Cevap

Bu arada, size harfle dize hafif bir hata var:

$string_1: a4nas60dj71wiena15sdl1131kg12b
$string_2: a4NaS60dJ71wIeNa15Sdl1131Kg12B
                               ^ should be capital so out of sync for rest of string

Sana bunu yapmanın iki yolu vereyim:

<?php
header('Content-Type: text/plain');

$string_1 = "a4nas60dj71wiena15sdl1131kg12b";
$string_2 = "a4NaS60dJ71wIeNa15Sdl1131Kg12B";

$letter_count = 0;
$result = '';
for ($i=0; $i<strlen($string_1); $i++) {
    if (!preg_match('![a-zA-Z]!', $string_1[$i])) {
        $result .= $string_1[$i];
    } else if ($letter_count++ & 1) {
        $result .= strtoupper($string_1[$i]);
    } else {
        $result .= $string_1[$i];
    }
}

$result2 = preg_replace_callback('!([a-zA-Z]\d*)([a-zA-Z])!', 'convert_to_upper', $string_1);

function convert_to_upper($matches) {
    return strtolower($matches[1]) . strtoupper($matches[2]);
}

echo "$string_1\n";
echo "$string_2\n";
echo "$result\n";
echo "$result2\n";
?>

Note: Yukarıda çeşitli varsayımlar yapar:

  1. Sayılar ve harfler dışında karakterler dizesi olabilir;
  2. Sen ("asdf" olur örneğin "ASDF") bakılmaksızın orijinal alternatif durumunda istiyorum;
  3. Sen her saniye yazmak, her saniye küçük harf sermaye ediyoruz.

Bu varsayımlar yanlış ise, yukarıda değiştirilebilir.

Dizeleri diziler değil, ve bir dizi olarak $ STRING_2 ilan ediyoruz ...

Eğer her letter olgusunu alternatif konum beri sayıları gözardı ederken hala, kodunuz, oldukça beklendiği gibi çalışmaz

aşağıdakileri deneyin:

function altCaps($str) {
    $lower = true;
    $str2 = "";
    for ($i=0;$len=strlen($str);$i<$len;++$i) {
        $char = substr($str,$i,1);
        if (is_numeric($char)) {
            $str2 .= $char;
        } else {
            if ($lower) {
                $str2 .= strtolower($char);
            } else {
                $str2 .= strtolower($char);
            }
            $lower = !$lower;
        }
    }
    return $str2;
}

Bu fonksiyon ile gitmek için iyi olmalıdır. Sadece alternate('string here'); aramak ve mükemmel çalışacaktır.

Bu vb tire, beyaz boşluk, dönemler ile çalışır dizeye dahil.

function alternate($string1)
{
    $do_caps = false;
    $string2 = '';
    for ($i = 0; $i < strlen($string1); $i++)
    {
      $char = substr($string1, $i, 1);
      if (stripos('abcdefghijklmnopqrstuvwxyz', $char) !== false)
      {
        	if ($do_caps)
        	{
        		$char = strtoupper($char);
        		$do_caps = false;
        	}
        	else
        	{
        		$do_caps = true;
        	}
      }
      $string2 .= $char;
    }
    return $string2;
}