使用PHP在数组中交替大写字母

时间:2009-05-30 06:17:17

标签: php arrays

我有一个像下面这样的字母数字字符串,

$string_1 = "a4nas60dj71wiena15sdl1131kg12b"

并希望将其更改为以下内容,

$string_2 = "a4NaS60dJ71wIeNa15Sdl1131Kg12B"

我该怎么做呢?我已经尝试了以下代码,但它不起作用。

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

上面的代码打印出“Array”,因此肯定无法正常工作。

3 个答案:

答案 0 :(得分:1)

顺便说一句,你的大写字符串有一个小错误:

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

我会给你两种方法:

<?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";
?>

注意:以上做了几个假设:

  1. 数字和字母以外的字符可以在字符串中;
  2. 您想要不管原件如何备用案件(例如“ASDF”变成“aSdF”);
  3. 你将每一个字母大写,而不是每隔一个小写字母。
  4. 如果这些假设不正确,可以改变上述内容。

答案 1 :(得分:0)

字符串不是数组,并且您将$ string_2声明为数组...

尽管如此,你的代码将无法按预期工作,因为,你会忽略所有其他字母的情况,而忽略数字

尝试以下方法:

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

答案 2 :(得分:0)

你应该很高兴使用这个功能。只需调用 alternate('string here'); 即可完美运行。

这适用于字符串中包含的连字符,空格,句点等。

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