есть ли способ получить n-й элемент разделенной строки без использования переменной?
Мой PHP-код всегда выглядит так:
$foo = explode(" ", "bla ble bli"); echo $foo[0];
Есть ли более короткий способ, возможно, в Python?
print "bla ble bli".split(" ")[0]
Заранее спасибо.
Это то, что люди должны использовать вместо того, чтобы explode
большую часть времени:
$foo = strtok("bla ble bli", " ");
Он отсекает первую часть строки до первого " "
.
Если вы не можете отпустить взорваться, то ближайшая идиома для выполнения [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(' ', 'ab c') ? $a : ''; echo list($_, $b) = explode(' ', 'ab 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 = '', если у вас могут быть разные разделители слов.