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

  • Автор темы Автор темы Powermic
  • Дата начала Дата начала

Powermic

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

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

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

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

а то надоело уже разбивать предварительно через explode, а потом обращаться по частям.
 
Нет, нельзя.
чтобы не надоедало разбивать, можно переключиться на какой-нибудь более интеллектуальный способ хранения данных.
 
Powermic
напиши класс stringWithDelimiters

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

реализация простая ведь.
 
а ты с 2006 года ни о каких больше форматах не слышал?
 
Автор оригинала: zerkms
Powermic
напиши класс stringWithDelimiters

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

реализация простая ведь.
:) ну это понятно, уже думал об этом. Просто хотел убедится, что стандартных методов нет
 
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];

вот даже реализовал для интереса :-) пользуйся не обляпайся :-)
 
zerkms
и чем это отличается от експлоде? отсутствием одного операнда?
 
*****
нет временной переменной (которые суть зло).
+ в такой класс можно переместить некоторые рутинные операции над строками, которые, бьюсь об заклад, есть у ТС наряду с озвученным вопросом
 
*****
ну где-то данные ведь нужно хранить. в случае с explode придётся хранить строку и $tmp для хранения массива (взорванной строки).

ps: ты ведь не знаешь, что строка as-is потом не понадобится. ведь не знаешь?
 
ты меня извини, но мне почему-то кажется, что отдельный класс для разбить строку по запятым, это худший пример говнокода.
машинка для ковыряния в носу.
и сама тема, на мой взгляд, не стоит бурных дискуссий. лично мне с этим грандиозным вопросом теории программирования приходится сталкиваться очень редко
 
ты меня извини, но мне почему-то кажется, что отдельный класс для разбить строку по запятым, это худший пример говнокода.
согласен отчасти: практическая ценность класса стремится к нулю, но по качеству сам код не такой уж и плохой, имхо :-)
 
- а от картины какая практическая ценность?
- она дырку в стене закрывает!
 
Сверху