Любой способ обнаружить и отделить код цвета HEX от строки в PHP? - PullRequest
0 голосов
/ 13 февраля 2020

Я создаю страницу статистики сервера в PHP, и в одном из моих запросов SQL отображается псевдоним игрока, включая его игровые цветовые коды HEX.

например, что я получаю и что я на самом деле хочу:

#FF0000Nick#00FF00name --> <span id="nickname"><span style="$color[0]">Nick</span><span style="$color[1]">name</span></span>

Что я хочу сделать, это отделить цвета от псевдонима, чтобы я мог оформить их в css и сделать псевдоним цветным.

Вот идея моего Фактический код, это в основном таблица с другой информацией, но я покажу вам ту, которую я использую для псевдонима:

while($row = mysqli_fetch_array($result)){

  $json = $row['data'];
  $playerDataTable = json_decode($json);

  foreach($playerDataTable as $playerData){

    $ingame_nickname = $playerData->nickname;

    echo "<div class='playerNames'";
        echo "<span>" . $forum_name . "</span>";
        echo "<span class='ingame_nickname'>" . $ingame_nickname . "</span>";
    echo "</div>";

  }

}

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Я бы посоветовал вам использовать регулярные выражения:

$string = "#FF0000Nick#00FF00name";
$tokens = preg_split('/(#[A-Z0-9]{6})/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);

$ токены будут массивом из 1, 3 или 5 элементов; элемент 0 будет частью имени пользователя перед первым шестнадцатеричным кодом, 1 первым шестнадцатеричным кодом (включая «#»), где 2 является частью текста, имеющего этот цвет, 3 вторым шестнадцатеричным кодом с 4 частью имени цвета вот так.

Если есть только 1 шестнадцатеричный код, $ tokens будет содержать только 3 элемента. Если их нет, $ tokens будет содержать один элемент, который является полным неокрашенным псевдонимом.

echo $tokens[0];
for($x = 1; $x < count($tokens); $x = $x + 2) {
    $color = $tokens[$x];
    $name_token = $tokens[$x + 1];
    echo '<span style="color:' . $color . ';">' . $name_token . '</span>';
}
0 голосов
/ 13 февраля 2020

Вы действительно должны заставить своего кодера сделать приличный JSON. Но, однако, вы можете использовать регулярные выражения с именованной группой захвата

<?php

$json = '{ "nickname": "#FF0000Nick#00FF00name" }';
$data = json_decode($json, true);
$garbledData = $data['nickname'];

// (?<firstHex>\#[A-F0-9]{6})  match and name the match 'firstHex' - look for a hash, then letters a-f or numbers 0-9, with a length of 6 characters  

// (?<name>.+) match and name the match 'name' - look for absolutely any characters, any amount

// (?<secondHex>\#[A-F0-9]{6})  match and name the match 'secondHex' - look for a hash, then letters a-f or numbers 0-9, with a length of 6 characters 

$regex = '/(?<firstHex>\#[A-F0-9]{6})(?<name>.+)(?<secondHex>\#[A-F0-9]{6})/';
preg_match($regex, $garbledData, $matches);

$firstHex = $matches['firstHex'];
$secondHex = $matches['secondHex'];
$name = $matches['name'];

echo $firstHex . "\n";
echo $secondHex . "\n";
echo $name . "\n";

Вывод:

#FF0000 
#00FF00 
Nick

Проверьте это здесь https://3v4l.org/qo2gc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...