нужно чтоб каждая 3 буква была в красный цвет,программа работает,но нужно чтоб выводилось слово HelloWorld и в этом слове было видно изменение Код (Text): <?php $str = 'HelloWorld'; $color="red"; $length = mb_strlen($str); for($i = 2; $i <= $length; $i += 3) if(isset($str[$i])) echo "<font color=$color>$str[$i]</font>";
PHP: <?php error_reporting ( E_БALL ); $fun = function ( string $string, string $color ): string { $a = ''; $c = 1; foreach ( preg_split ( '//u', $string, -1, PREG_SPLIT_NO_EMPTY ) AS $char ) { $a .= ( ( $c++ ) % 3 == 1 ? sprintf ( '<font color="%s">%s</font>', $color, $char ) : $char ); } return $a; }; echo $fun ( 'Хочу уСех целиком!', 'red' );
Мощно! Так Вы и выводите, только каждый третий символ, а Вам нужно выводить все, но каждый третий красить.
PHP: <?php class volsebnij { private $str; private $lenqt; private $color; private $period; private $rezult; function __construct($str, $color, $period) { $this->str=$str; $this->color=$color; $this->period=$period; $this->lenqt= $this->getLengt($str); } private function getLengt($str){ return $length = mb_strlen($str); } public function getString(){ $arraySymbols = str_split($this->str); foreach ($arraySymbols as $key=>$value){ if((($key+1)%$this->period)==0){ $this->rezult= $this->rezult.'<font color="'.$this->color.'">'.$value.'</font>'; } else { $this->rezult=$this->rezult.$value; } } return $this->rezult; } } $volsebstvo = new volsebnij('HelloWorld', 'red', 3); print $volsebstvo->getString();
фуууу!!! фуууууу ( х100 ) THIS IS Byte! --- Добавлено --- а эту балду можно было замутить под __string() echo new volsebnij('HelloWorld', 'red', 3); --- Добавлено --- а смысл жизни ?
Код (Text): Замечание: Функция str_split() производит разбивку по байтам, а не по символам, в случае использования строк в многобайтных кодировках.
PHP: final class Test { public function __construct ( string $string ) { $this -> str = $string; } public function __call( $method, $arguments ) { switch ( $method ) { case 'split': $this -> str = preg_split ( '//u', $this -> str, -1, PREG_SPLIT_NO_EMPTY ); break; case 'reverse': $this -> str = array_reverse ( $this -> str ); break; } return $this; # Текучая цепь } /* - get string */ public function __toString() { return ( is_array ( $this -> str ) ? implode ( '', $this -> str ) : $this -> str ); } } echo ( new Test( 'Рекурсивный акроним словосочетания «PHP: Hypertext Preprocessor»' ) ) -> split() -> reverse(); --- Добавлено --- а третий - смысл существования той переменной, где кол-ва подсчитанных mb_символов ? @laszlopv
@MouseZver Спасибо, крутые замечания. Про первый так вобще стыдно на кирилице функция бы не сработала скорее всего, нужно было проверить. В остальном я так себе придумал, но твой вариант конечно лучше. Некоторые вещи я даже не понимаю. -//--//--//--//--//--//-- Уже понимаю