PHP функция для сортировки списка стилей CSS и упорядочения их по группам - PullRequest
0 голосов
/ 11 января 2019

Я застрял, пытаясь создать функцию в PHP, и мне нужна помощь от вас, ребята.

Мне нужно найти способ разбить все строки CSS на массивы, а затем найти подходящие элементы и объединить их в группы. Объяснять немного сложно, поэтому я напишу это ниже.

=============================================== ============

Первый -> (Стандартный CSS)

.className1 {
    font-family: 'Helvetica';
    color: #000;
    text-align: center;
}

.className2 {
    font-family: 'Arial';
    color: #000;
    text-align: left;
}

.className3 {
    color: #000;
    text-align: center;
}

.className4 {
    text-align: center;
}

Итак, теперь давайте предположим, что вы нажимаете кнопку HTML для сортировки CSS, я хотел бы, чтобы функция PHP возвращала этот CSS, но организовал и отсортировал, как это:

=============================================== ============

Второй -> (Что мне нужно)

.className1, .className2, .className3 { color: #000; }

.className1, .className3, .className4 { text-align: center; }

.className1 { font-family: 'Helvetica'; }

.className2 { font-family: 'Arial'; text-align: left; }

=============================================== ============

Это то, что у меня есть (прошу прощения за лучшие практики)

$source = $_POST['source'];

$source_lines = preg_split("/}/", $source);
$source_lines = array_filter(array_map('trim', $source_lines));

function contains_CSS_Style($str, $arr) {
    foreach($arr as $a) {
        if (stripos($str,$a) !== false)
        {
            $same_array[] = $a;
        }
    }
    return array($str, $same_array);
}

foreach ($source_lines as $value) {
    $selection = explode('{', $value);
    $css_name = $selection[0];
    $css_line = $selection[1];
    $css_line = str_replace(':', ':', $css_line);
    $css_style = explode(';', $css_line);

    foreach ($css_style as $style) {
        $all_styles[] = $style;
    }
}

$myArray = array_filter(array_map('trim', $all_styles));
$myArray = array_unique($all_styles);

foreach ($source_lines as $value) {
    $name = contains_CSS_Style($value, $myArray)[0];
    echo "yes! " . $name . "</br></br>";

    foreach (contains_CSS_Style($value, $myArray)[1] as $value) {
        echo "the word is ==== " . $value . "</br>";
    }

    echo "</br>";
}

Это то, что отражено.

yes! .className1 { font-family: 'Helvetica'; color: #000; text-align: center;

the word is ==== font-family: 'Helvetica'
the word is ==== color: #000
the word is ==== text-align: center

yes! .className2 { font-family: 'Arial'; color: #000; text-align: left;

the word is ==== color: #000
the word is ==== font-family: 'Arial'
the word is ==== text-align: left

yes! .className3 { color: #000; text-align: center;

the word is ==== color: #000
the word is ==== text-align: center

yes! .className4 { text-align: center;

the word is ==== text-align: center

Если вы, ребята, можете помочь мне сделать это, я был бы очень признателен.

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