Сокращение для: $ foo = explode ("", "bla ble bli");echo $ foo [0] - PullRequest
4 голосов
/ 31 марта 2011

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

Мой PHP-код всегда выглядит так:

$foo = explode(" ", "bla ble bli");
echo $foo[0];

Есть ли более короткий путь, как в Python?

print "bla ble bli".split(" ")[0]

Заранее спасибо.

Ответы [ 9 ]

11 голосов
/ 31 марта 2011

Это то, что люди должны использовать вместо explode большую часть времени:

$foo = strtok("bla ble bli", " ");

Отрезает первую часть строки до первой " ".

ЕслиВы не можете отпустить взрыв, тогда ближайшая идиома для выполнения [0], как в Python:

$foo = current(explode(...));

Если это не просто первый элемент, то он становится немного более громоздким:

$foo = current(array_slice(explode(...), 2));   // element [2]
2 голосов
/ 31 марта 2011

(На самом деле это не ответ сам по себе - другие ответили очень хорошо)


Это одна из функций, которая должна появиться в одной из следующих версий PHP (возможно, PHP 5.4) .

Для получения дополнительной информации см. Функции в магистрали PHP: разыменование массива - цитирование одного из приведенных примеров:

<?php
function foo() {
    return array(1, 2, 3);
}
echo foo()[2]; // prints 3
?>
1 голос
/ 31 марта 2011

Почему бы просто не сделать:

function splode($string, $delimiter, $index){
 $r = explode($delimiter, $string);
 return $r[$index];
}

Я использую, как ходжиллион, маленькие функции, подобные этой.

1 голос
/ 31 марта 2011

попробуйте это:

одна строка:

<?php

echo (($f=explode(" ", "bla ble bli"))?$f[0]:'');

?>

результат здесь: http://codepad.org/tnhbpYdd

0 голосов
/ 31 марта 2011

близко. правильный путь - создание функции или метода для чего-то, что повторяется.

function extract_word($input, $index) {
    $input = explode(' ', $input);
    return $input[$index];
}

добавьте третий аргумент $ separater = '', если у вас могут быть разные разделители слов.

0 голосов
/ 31 марта 2011

Следующее, пожалуй, самый чистый способ сделать то, что запросил OP.Он определяет функцию, но не имеет собственных переменных, и он выполнит работу практически для любой ситуации:

function at(&$arr, &$pos) { return $arr[$pos]; }

Пример использования:

echo at( explode('|', 'a|b|c|d'), 1 ); // Outputs 'b'

Функция представляет собой одну строку кода, и ее нетрудно зафиксировать в памяти.Если вы используете его только один раз, вы можете определить его в локальной области, где он будет использоваться для минимизации помех в коде.
В качестве небольшого дополнительного преимущества, поскольку функция не проверяет $arr или $pos, он выдаст все те же ошибки, что и при попытке доступа к несуществующему индексу для массива, или даже вернет отдельные символы в строке или элементы в парном массиве ключ-значение.

0 голосов
/ 31 марта 2011

Я не знаю, как сделать то, что вы хотите, хотя я и раньше хотел делать то же самое много раз.Для этого конкретного случая вы могли бы сделать

$bar = substr($foo, 0, strpos($foo, " "));

, которая перестает быть одной дополнительной переменной, но не совсем то, что вы хотели.

0 голосов
/ 31 марта 2011

Не так, как я знаю, хотя вы могли бы определить функцию и использовать ее.

function firstWord($string) {
  $foo = explode(" ", $string);
  return $string;
}
0 голосов
/ 31 марта 2011

Я могу придумать только одно выражение:

echo list($a) = explode(' ', 'a b c') ? $a : '';
echo list($_, $b) = explode(' ', 'a b c') ? $b : '';
...