Используйте заглавные буквы в разобранном массиве - PullRequest
1 голос
/ 04 мая 2011

Изначально я отправил вопрос, чтобы найти решение, которое должно использовать заглавные буквы в строке. К счастью, Alex @ SOF смог предложить отличное решение, однако я не смог заставить его работать с массивом ... Чтобы понять, что я пытаюсь сделать в этом случае, это взорвать кавычки, затем использовать заглавные буквы в массиве. взорвать их обратно.

if (stripos($data, 'test') !== false) {
$arr = explode('"', $data);

$newStr = '';
foreach($arr as $index => $char) {
$newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
}

$data = implode('"', $arr);
}

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Для использования анонимной функции требуется> = PHP 5.3. Если нет, просто сделайте обратный вызов нормальной функцией. Вы можете использовать create_function(), но это довольно уродливо.

$str = '"hello" how you "doing?"';

$str = preg_replace_callback('/"(.+?)"/', function($matches) {
  $newStr = '';
   foreach(str_split($matches[0]) as $index => $char) {
       $newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
   }
   return $newStr;

}, $str);

var_dump($str);

Выход

string(24) ""hElLo" how you "dOiNg?""

CodePad .

Если вы хотите поменять местами дело, поменяйте местами звонки strtolower() и strtoupper().

2 голосов
/ 04 мая 2011

Это то, что вы ищете?

 foreach($data as $key => $val)
    {
       if($key%2==0) $data[$key] = strtoupper($data[$key]);
       else $data[$key] = strtolower($data[$key]);
    }
1 голос
/ 04 мая 2011

Или .... вместо использования регулярного выражения вы можете просто не использовать метод разнесения, а использовать любой другой символ и использовать его с большой буквы. Вот пример:

$test = "test code here";

        $count = strlen($test);
        echo "Count = " . $count . '<br/>';
        for($i = 0; $i < $count; $i++)
        {
            if($i % 2 == 0)
            {
                $test[$i] = strtolower($test[$i]);
            }
            else 
            {
                $test[$i] = strtoupper($test[$i]);
            }
        }
        echo "Test = " . $test;

Секрет кроется в операторе модуля. ;)

Редактировать: Данг, я только что заметил, что сообщение выше меня от Джордана Арсено уже представило этот ответ ... Я застрял в ответе на регулярное выражение, я пропустил это: - / Извините, Джордан, вы уже были на точке.

...