Ярлык для: $foo = взорваться("", "бла-бла-бла"); эхо $foo[0]
Есть ли способ получить n-й элемент разделенной строки без использования переменной?
Мой PHP-код всегда выглядит так:
$foo = explode(" ", "bla ble bli");
echo $foo[0];
Может быть, есть более короткий способ, как в Python?
print "bla ble bli".split(" ")[0]
Заранее благодарю.
9 answers
Это то, что люди должны использовать вместо explode
большую часть времени:
$foo = strtok("bla ble bli", " ");
Он отсекает первую часть строки до тех пор, пока первая " "
.
Если вы не можете отпустить explode, то ближайшая идиома для выполнения [0]
, как в Python, это:
$foo = current(explode(...));
Если это не просто первый элемент, то он становится немного более громоздким:
$foo = current(array_slice(explode(...), 2)); // element [2]
( Не совсем ответ как таковой - другие ответили довольно хорошо)
Это одна из функций, которая должна появиться в одной из следующих версий PHP (PHP 5.4, возможно).
Для получения дополнительной информации см. Функции в магистрали PHP: Разыменование массивов -- цитируя один из приведенных примеров:
<?php
function foo() {
return array(1, 2, 3);
}
echo foo()[2]; // prints 3
?>
Попробуйте это:
Его одна строка:
<?php
echo (($f=explode(" ", "bla ble bli"))?$f[0]:'');
?>
Результат здесь: http://codepad.org/tnhbpYdd
Почему бы просто не сделать:
function splode($string, $delimiter, $index){
$r = explode($delimiter, $string);
return $r[$index];
}
Я использую примерно миллион таких маленьких функций, как эта.
Только с одним выражением, которое я могу придумать:
echo list($a) = explode(' ', 'a b c') ? $a : '';
echo list($_, $b) = explode(' ', 'a b c') ? $b : '';
Насколько я знаю, нет, хотя вы могли бы определить функцию и использовать ее.
function firstWord($string) {
$foo = explode(" ", $string);
return $string;
}
Я не знаю способа сделать то, что ты хочешь, хотя я уже много раз хотел сделать то же самое. Для этого конкретного случая вы могли бы сделать
$bar = substr($foo, 0, strpos($foo, " "));
, который перестает быть одной дополнительной переменной, но это не совсем то, что вы хотели.
Следующее, вероятно, самый чистый способ, который я могу придумать, чтобы сделать то, что просил ОП. Он определяет функцию, но не имеет собственных переменных, и он выполнит работу практически в любой ситуации:
function at(&$arr, &$pos) { return $arr[$pos]; }
Пример использования:
echo at( explode('|', 'a|b|c|d'), 1 ); // Outputs 'b'
Функция представляет собой одну строку кода, и ее будет нетрудно зафиксировать в памяти. Если вы используете его только один раз, вы можете определить его в локальной области, где он будет использоваться, чтобы минимизировать беспорядок кода.
Как небольшое дополнительное преимущество, поскольку функция не проверяет $arr
или $pos
, она выдаст все те же ошибки, что и при попытке получить доступ к несуществующему индексу для массива, или даже вернет отдельные символы в строке или элементы в парном массиве ключ-значение.
Закрыть. правильный путь - это создание функции или метода для чего-то, что повторяется.
function extract_word($input, $index) {
$input = explode(' ', $input);
return $input[$index];
}
Добавьте третий аргумент $separater = '', если у вас могут быть разные разделители слов.