обращение к строке как массиву с разделителем

Powermic

Новичок
обращение к строке как массиву с разделителем

подскажите можно ли каким-то образом обращаться к строке как к массиву, с учетом разделителей?

например, чтобы получить red из:

$str='red,green,blue';
echo $str(",")[0];

а то надоело уже разбивать предварительно через explode, а потом обращаться по частям.
 

Фанат

oncle terrible
Команда форума
Нет, нельзя.
чтобы не надоедало разбивать, можно переключиться на какой-нибудь более интеллектуальный способ хранения данных.
 

zerkms

TDD infected
Команда форума
Powermic
напиши класс stringWithDelimiters

$str = new stringWithDelimiters('red,green,blue');
echo $str[','][0];

реализация простая ведь.
 

Фанат

oncle terrible
Команда форума
а ты с 2006 года ни о каких больше форматах не слышал?
 

Powermic

Новичок
Автор оригинала: zerkms
Powermic
напиши класс stringWithDelimiters

$str = new stringWithDelimiters('red,green,blue');
echo $str[','][0];

реализация простая ведь.
:) ну это понятно, уже думал об этом. Просто хотел убедится, что стандартных методов нет
 

zerkms

TDD infected
Команда форума
PHP:
<?php

class stringWithDelimiters implements ArrayAccess
{
    private $string;

    public function __construct($string)
    {
        $this->string = $string;
    }

    public function offsetExists($delimiter)
    {
        return strpos($this->string, $delimiter) !== false;
    }

    public function offsetGet($delimiter)
    {
        return explode($delimiter, $this->string);
    }

    public function offsetSet($offset, $value)
    {
        throw new Exception('Only reading allowed');
    }

    public function offsetUnset($offset)
    {
        throw new Exception('Only reading allowed');
    }
}

$str = new stringWithDelimiters('red,green,blue');
echo $str[','][0];
echo $str[','][2];
вот даже реализовал для интереса :) пользуйся не обляпайся :)
 

Фанат

oncle terrible
Команда форума
zerkms
и чем это отличается от експлоде? отсутствием одного операнда?
 

zerkms

TDD infected
Команда форума
*****
нет временной переменной (которые суть зло).
+ в такой класс можно переместить некоторые рутинные операции над строками, которые, бьюсь об заклад, есть у ТС наряду с озвученным вопросом
 

zerkms

TDD infected
Команда форума
*****
ну где-то данные ведь нужно хранить. в случае с explode придётся хранить строку и $tmp для хранения массива (взорванной строки).

ps: ты ведь не знаешь, что строка as-is потом не понадобится. ведь не знаешь?
 

Фанат

oncle terrible
Команда форума
ты меня извини, но мне почему-то кажется, что отдельный класс для разбить строку по запятым, это худший пример говнокода.
машинка для ковыряния в носу.
и сама тема, на мой взгляд, не стоит бурных дискуссий. лично мне с этим грандиозным вопросом теории программирования приходится сталкиваться очень редко
 

zerkms

TDD infected
Команда форума
ты меня извини, но мне почему-то кажется, что отдельный класс для разбить строку по запятым, это худший пример говнокода.
согласен отчасти: практическая ценность класса стремится к нулю, но по качеству сам код не такой уж и плохой, имхо :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
- а от картины какая практическая ценность?
- она дырку в стене закрывает!
 
Сверху