@Shimpanze

Самый короткий способ обработать каждый элемент массива?

Вопрос для повышения квалификации.

Есть ли более краткий способ добавить точки (просто для примера) перед каждым элементом массива?

Я использую этот, но вдруг профессионалы используют более краткую запись:

$arr = ['foo', 'bar', 'baz'];
$arr = array_map( fn( $value ) => $value = '...' . $value, $arr );
// вывод: ['...foo', '...bar', '...baz']
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Профессионалы, например, понимают, что присвоение $value здесь бессмысленно и не пишут его. И вот я сэкономил вам целых 9 символов - потратьте их с умом.
Ещё профессоналы понимают, что в коде важна читаемость, а не краткость. И именно умение писать понятный код является показателем квалификации.

Ну а прям профессиональные профессионалы решают эту задачу исключительно вот так:
Посмотреть профессиональный код

<?php
declare(strict_types=1);

class Ellipsis
{
    private string $char;
    private int $count;

    /**
     * @param string $char
     * @param int $count
     */
    public function __construct(string $char, int $count)
    {
        $this->char = $char;
        $this->count = $count;
    }

    /**
     * @return string
     */
    public function getChar(): string
    {
        return $this->char;
    }

    /**
     * @return int
     */
    public function getCount(): int
    {
        return $this->count;
    }
}

class Ellipsisist
{
    private Ellipsis $ellipsis;

    /**
     * @param Ellipsis $ellipsis
     */
    public function __construct(Ellipsis $ellipsis)
    {
        $this->ellipsis = $ellipsis;
    }

    /**
     * @param string $value
     * @return string
     */
    public function __invoke(string $value): string
    {
        return str_pad($value, mb_strlen($value) + $this->ellipsis->getCount(), $this->ellipsis->getChar(), STR_PAD_LEFT);
    }
}

class EllipsisistFactory
{
    /**
     * @param string $char
     * @param int $count
     * @return Ellipsisist
     */
    public static function make(string $char, int $count): Ellipsisist
    {
        return new Ellipsisist(new Ellipsis($char, $count));
    }
}

$arr = ['foo', 'bar', 'baz'];

$ellipsisiatedArr = array_map(
    EllipsisistFactory::make('.', 3),
    $arr
);

var_dump($ellipsisiatedArr);

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽