ilyabond
@ilyabond
В яме даннинга крюгера

Этот код считается трудночитабельным?

Мне нужно было сформировать массив определенным образом. Чтобы была структура:
[
[0] => [
[original] => "<img width="448" src="..." height="366" title="Вопрос?" alt="Вопрос?">",
[attributes] => [
[width] => "448"
[src] => "/upload/medialibrary/412/comics_151341_640.png"
[height] => "366"
[title] => "Вопрос?"
[alt] => "Вопрос?"
], 
[1] => ...
]


Получившаяся структура наглядно:
63eb855023050760174183.png

Всё сделал, но понимаю что код как-будто не читабельный:

preg_match_all('/(?<=\<img).*?(?=>)/', $this->html, $match, PREG_PATTERN_ORDER);

    $this->tags = array_map(
      fn($strTag) => [
        "original" => "<img " . $strTag . ">",
        "attributes" => array_map(
          fn($attribute) => array_pop(explode("=", $attribute)),
          array_combine(
              array_map(
                fn($attribute) => array_shift(explode("=", $attribute)),
                explode(" ", trim($strTag))
              ),
              explode(" ", trim($strTag))
          )
        )
      ],
      $match[0]
    );


Подскажите, как сделать его более читабельным? Возможно перемудрил. Я рад был бы что-то почитать на эту тему, буду рад если подскажите.
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Для повышения читабельности разбеыте код на отдельные функции. Напромер так:
<?php
function getTags($strTag) {
    return array_combine(
        array_map(
            fn($attribute) => array_shift(explode("=", $attribute)),
            explode(" ", trim($strTag))
        ),
        explode(" ", trim($strTag))
    );
}

function getAttributes($strTag) {
    return array_map(
        fn($attribute) => array_pop(explode("=", $attribute)),
        getTags($strTag)
    );
}

preg_match_all('/(?<=\<img).*?(?=>)/', $this->html, $match, PREG_PATTERN_ORDER);

$this->tags = array_map(
    fn($strTag) => [
        "original" => "<img " . $strTag . ">",
        "attributes" => getAttributes($strTag)
    ],
    $match[0]
);


https://phpize.online/sql/mysql57/undefined/php/ph...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы