Переменные заглавные буквы в массиве с использованием PHP - PullRequest
0 голосов
/ 30 мая 2009

У меня есть буквенно-цифровая строка, как показано ниже,

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

1 голос
/ 30 мая 2009

Кстати, у вас есть небольшая ошибка в вашей заглавной строке:

$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. Вы пишете с заглавной буквы каждую вторую букву, а не каждую вторую строчную букву.

Вышеизложенное можно изменить, если эти предположения неверны.

0 голосов
/ 30 мая 2009

Вы должны хорошо использовать эту функцию. Просто вызовите 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;
}
0 голосов
/ 30 мая 2009

Строки не являются массивами, и вы объявляете $ 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...