PHP Css Массив, делящий каждое значение на единицы в конце - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю над тем, что я думаю, будет простой задачей в php. Цель состоит в том, чтобы взять таблицу стилей и разделить все значения на 2. Это то, что у меня есть до сих пор:

<?php
$css = fopen("stylesheet.css", "r") or die("Unable to open file!");
preg_match_all( '/(?ims)([a-z0-9\s\,\.\:#_\-@]+)\{([^\}]*)\}/', $css, $arr);

$result = array();
foreach ($arr[0] as $i => $x)
{
    $selector = trim($arr[1][$i]);
    $rules = explode(';', trim($arr[2][$i]));
    $result[$selector] = array();
    foreach ($rules as $strRule)
    {
        if (!empty($strRule))
        {
            $rule = explode(":", $strRule);
            $result[$selector][][trim($rule[0])] = trim($rule[1]);
        }
    }
}   

var_dump($result);
?>

Моя таблица CSS также довольно проста

.text_1_1 {
  width: 419px;
  height: 101.5px;
  background-size: 1459.5px 632.5px;
  background-position: -486px -255.5px;
}
.text_1_2 {
  width: 393.5px;
  height: 49.5px;
  background-size: 1459.5px 632.5px;
  background-position: -7px -398.5px;
}

и мой вывод выглядит следующим образом:

array(2) {
  [".text_1_1"]=>
  array(4) {
    [0]=>
    array(1) {
      ["width"]=>
      string(5) "419px"
    }
    [1]=>
    array(1) {
      ["height"]=>
      string(7) "101.5px"
    }
    [2]=>
    array(1) {
      ["background-size"]=>
      string(16) "1459.5px 632.5px"
    }
    [3]=>
    array(1) {
      ["background-position"]=>
      string(15) "-486px -255.5px"
    }
  }
  [".text_1_2"]=>
  array(4) {
    [0]=>
    array(1) {
      ["width"]=>
      string(7) "393.5px"
    }
    [1]=>
    array(1) {
      ["height"]=>
      string(6) "49.5px"
    }
    [2]=>
    array(1) {
      ["background-size"]=>
      string(16) "1459.5px 632.5px"
    }
    [3]=>
    array(1) {
      ["background-position"]=>
      string(13) "-7px -398.5px"
    }
  }
}

Теперь для части, которая меня запутала, я бы хотел go в этот массив и разделить все числа на 2, которые, как я полагаю, я могу достичь с помощью для каждого, но как мне заставить его игнорировать «px» в конце каждого значения?

Спасибо за помощь, я знаю, что это должно быть что-то легкое, и мне просто не хватает этого.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

наоборот

$str="";
    foreach ($result as $selector => $block) {
      $str.=$selector."{";
      foreach($block as $i => $rule) {
        foreach($rule as $attr => $val) {
              $str .= $attr.": ".$val.";";
        }
      }
      $str .="} ";
    }
0 голосов
/ 21 апреля 2020

Заменить блок

{
    $rule = explode(":", $strRule);
    $pxless = str_replace("px","", trim($rule[1]));
    $arr = explode(" ", $pxless);
    for($j=0; $j<count($arr); $j++) $arr[$j]=($arr[$j]/2)."px";
    $finally = implode(" ", $arr);
    $result[$selector][][trim($rule[0])] = $finally;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...