Как получить доступ к индексу массива при использовании explode () в той же строке? - PullRequest
2 голосов
/ 23 июня 2010

Не могу обернуть голову вокруг этого ...

Скажем, мы взорвали все это так:

$ extract = explode ('tra-la-la', $ big_sourse);

Затем мы хотим получить значение по индексу 1:

$ finish = $ extract [1];

У меня вопрос, как получить это за один раз, так сказать.Нечто похожее на это:

$ finish = explode ('tra-la-la', $ big_sourse) [1];// не работает

Что-то вроде следующего будет работать как шарм:

$ finish = end (explode ('tra-la-la', $ big_sourse));

// или

$ finish = array_shift (explode ('tra-la-la', $ big_sourse));

Но что, если значение находится где-то посередине?

Ответы [ 4 ]

7 голосов
/ 23 июня 2010

Функция разыменования массива была реализована в PHP 5.4. Для более старой версии это ограничение в парсере PHP, которое было исправлено здесь , так что сейчас я не боюсь.

1 голос
/ 23 июня 2010

Примерно так:

end(array_slice(explode('tra-la-la', $big_sourse), 1, 1));

Хотя я не думаю, что это лучше / чище / красивее, чем писать это в две строки.

0 голосов
/ 23 июня 2010

Я предлагаю - да, я кое-что выяснил - было бы использовать дополнительный агрумент, разрешенный для этой функции. Если оно установлено и положительно, возвращаемый массив будет содержать максимум элементов limit с последним элементом, содержащим остаток строки. Итак, если мы хотим получить, скажем, значение по индексу 2 (конечно, мы уверены, что значение, которое нам нужно, будет там заранее), мы просто сделаем это следующим образом:

$finish = end(explode('tra-la-la', $big_sourse, 3)); 

explode вернет массив, который содержит максимум три элемента, поэтому мы «заканчиваем» последний элемент, который мы искали, проиндексировали 2 - и все готово!

0 голосов
/ 23 июня 2010

вы можете использовать list:

list($first_element) = explode(',', $source);

[1] фактически будет вторым элементом в массиве, не уверен, действительно ли вы это имели в виду. если это так, просто добавьте еще одну переменную в конструкцию списка (и опустите первую, если хотите)

list($first_element, $second_elment) = explode(',', $source);
// or
list(, $second_element) = explode(',', $source);
...