За последние 24 часа нас посетили 56175 программистов и 6389 роботов. Сейчас ищут 2787 программистов ...

Работа со строкой

Тема в разделе "PHP для новичков", создана пользователем test562321, 24 апр 2018.

  1. test562321

    test562321 Новичок

    С нами с:
    24 апр 2018
    Сообщения:
    3
    Симпатии:
    0
    нужно чтоб каждая 3 буква была в красный цвет,программа работает,но нужно чтоб выводилось слово HelloWorld и в этом слове было видно изменение
    Код (Text):
    1. <?php
    2. $str = 'HelloWorld';
    3. $color="red";
    4. $length = mb_strlen($str);
    5. for($i = 2; $i <= $length; $i += 3)
    6.     if(isset($str[$i]))
    7.     echo "<font color=$color>$str[$i]</font>";
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
  3. test562321

    test562321 Новичок

    С нами с:
    24 апр 2018
    Сообщения:
    3
    Симпатии:
    0
    ну выводит lwl 3 буквы,а хочу чтоб слово целиком выводилось
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    перед зарплатой я тоже не отказался бы произнести "Хочу уСех целиком!".
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_БALL );
    4.  
    5. $fun = function ( string $string, string $color ): string
    6. {
    7.     $a = '';
    8.     $c = 1;
    9.  
    10.     foreach ( preg_split ( '//u', $string, -1, PREG_SPLIT_NO_EMPTY ) AS $char )
    11.     {
    12.         $a .= ( ( $c++ ) % 3 == 1 ? sprintf ( '<font color="%s">%s</font>', $color, $char ) : $char );
    13.     }
    14.  
    15.     return $a;
    16. };
    17.  
    18.  
    19. echo $fun ( 'Хочу уСех целиком!', 'red' );
     
  6. FullSilence

    FullSilence Новичок

    С нами с:
    19 май 2017
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Москва, Зеленоград
    Мощно!
    Так Вы и выводите, только каждый третий символ, а Вам нужно выводить все, но каждый третий красить.
     
  7. laszlopv

    laszlopv Активный пользователь

    С нами с:
    26 фев 2017
    Сообщения:
    244
    Симпатии:
    40
    PHP:
    1. <?php
    2.  
    3. class volsebnij {
    4.    
    5.     private $str;
    6.     private $lenqt;
    7.     private $color;
    8.     private $period;
    9.     private $rezult;
    10.            
    11.     function __construct($str, $color, $period) {
    12.         $this->str=$str;
    13.         $this->color=$color;
    14.         $this->period=$period;
    15.         $this->lenqt= $this->getLengt($str);
    16.     }
    17.    
    18.     private function getLengt($str){
    19.         return $length = mb_strlen($str);
    20.     }
    21.      
    22.     public function getString(){
    23.        
    24.         $arraySymbols = str_split($this->str);
    25.         foreach ($arraySymbols as $key=>$value){
    26.             if((($key+1)%$this->period)==0){
    27.                 $this->rezult= $this->rezult.'<font  color="'.$this->color.'">'.$value.'</font>';
    28.             }
    29.             else {
    30.                 $this->rezult=$this->rezult.$value;
    31.             }
    32.         }
    33.    
    34.         return $this->rezult;
    35.     }
    36. }
    37.  
    38.  
    39. $volsebstvo = new volsebnij('HelloWorld', 'red', 3);
    40. print $volsebstvo->getString();
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    фуууу!!! фуууууу ( х100 )
    THIS IS Byte!
    --- Добавлено ---
    а эту балду можно было замутить под __string()
    echo new volsebnij('HelloWorld', 'red', 3);
    --- Добавлено ---
    а смысл жизни ?
     
    laszlopv нравится это.
  9. laszlopv

    laszlopv Активный пользователь

    С нами с:
    26 фев 2017
    Сообщения:
    244
    Симпатии:
    40
    @MouseZver Разверни комментарии больше, мне реально интересно, любой дельный совет.
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    Код (Text):
    1.     Замечание:
    2.  
    3.     Функция str_split() производит разбивку по байтам, а не по символам, в случае использования строк в многобайтных кодировках.
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1. final class Test
    2. {
    3.     public function __construct ( string $string )
    4.     {
    5.         $this -> str = $string;
    6.     }
    7.  
    8.     public function __call( $method, $arguments )
    9.     {
    10.         switch ( $method )
    11.         {
    12.             case 'split':
    13.                 $this -> str = preg_split ( '//u', $this -> str, -1, PREG_SPLIT_NO_EMPTY );
    14.             break;
    15.             case 'reverse':
    16.                 $this -> str = array_reverse ( $this -> str );
    17.             break;
    18.         }
    19.      
    20.         return $this; # Текучая цепь
    21.    }
    22.  
    23.     /*
    24.         - get string
    25.     */
    26.     public function __toString()
    27.     {
    28.         return ( is_array ( $this -> str ) ? implode ( '', $this -> str ) : $this -> str );
    29.     }
    30. }
    31.  
    32. echo ( new Test( 'Рекурсивный акроним словосочетания «PHP: Hypertext Preprocessor»' ) ) -> split() -> reverse();
    --- Добавлено ---
    а третий - смысл существования той переменной, где кол-ва подсчитанных mb_символов ? @laszlopv
     
    laszlopv нравится это.
  12. laszlopv

    laszlopv Активный пользователь

    С нами с:
    26 фев 2017
    Сообщения:
    244
    Симпатии:
    40
    @MouseZver Спасибо, крутые замечания. Про первый так вобще стыдно на кирилице функция бы не сработала скорее всего, нужно было проверить. В остальном я так себе придумал, но твой вариант конечно лучше. Некоторые вещи я даже не понимаю.

    -//--//--//--//--//--//--

    Уже понимаю
     
    #12 laszlopv, 25 апр 2018
    Последнее редактирование: 25 апр 2018