我想在使用命令行的PHP应用程序中为整行背景颜色着色。问题是我没有找到任何“更聪明”的方法来做到:
public function outFullLine($string, $center = false)
{
$terminalColumns = exec('tput cols');
$emptyRow = implode(array_fill(0, $terminalColumns, " "));
if ($center) {
$position = strlen($emptyRow) / 2 - strlen($string) / 2;
} else {
$position = 0;
}
$outputString = substr_replace(
$emptyRow,
$string,
$position,
strlen($string)
);
fwrite(STDOUT, $string);
}
那么有没有办法做到这一点,而没有实际填补空白行?我想这更像是一个bash而不是PHP问题所以我标记了两个。
答案 0 :(得分:1)
或者上课然后调用颜色:
class ColorCLI {
static $foreground_colors = array(
'black' => '0;30', 'dark_gray' => '1;30',
'blue' => '0;34', 'light_blue' => '1;34',
'green' => '0;32', 'light_green' => '1;32',
'cyan' => '0;36', 'light_cyan' => '1;36',
'red' => '0;31', 'light_red' => '1;31',
'purple' => '0;35', 'light_purple' => '1;35',
'brown' => '0;33', 'yellow' => '1;33',
'light_gray' => '0;37', 'white' => '1;37',
);
static $background_colors = array(
'black' => '40', 'red' => '41',
'green' => '42', 'yellow' => '43',
'blue' => '44', 'magenta' => '45',
'cyan' => '46', 'light_gray' => '47',
);
// Returns colored string
public static function getColoredString($string, $foreground_color = null, $background_color = null) {
$colored_string = "";
// Check if given foreground color found
if ( isset(self::$foreground_colors[$foreground_color]) ) {
$colored_string .= "\033[" . self::$foreground_colors[$foreground_color] . "m";
}
// Check if given background color found
if ( isset(self::$background_colors[$background_color]) ) {
$colored_string .= "\033[" . self::$background_colors[$background_color] . "m";
}
// Add string and end coloring
$colored_string .= $string . "\033[0m";
return $colored_string;
}
// Returns all foreground color names
public static function getForegroundColors() {
return array_keys(self::$foreground_colors);
}
// Returns all background color names
public static function getBackgroundColors() {
return array_keys(self::$background_colors);
}
}
首先需要计算字符总数,然后将颜色填充到一行:
$screenwidth = exec('tput cols');
$screenheight = exec('tput lines');
选中此颜色以及行:http://blog.apokalyptik.com/2007/11/20/colorizing-php-cli-scripts/以及此完整的类代码示例:https://github.com/runekaagaard/php-termcolor/blob/master/termcolor.php
答案 1 :(得分:0)
在为字符及其背景着色时,要为整行着色,必须用空白字符填充它,例如空格或制表符。顺便说一下,有一个很好的Console Color pear class