Ярлык для: $foo = взорваться("", "бла-бла-бла"); эхо $foo[0]


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

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

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

Может быть, есть более короткий способ, как в Python?

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

Заранее благодарю.

Author: Neal, 2011-03-31

9 answers

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

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

Он отсекает первую часть строки до тех пор, пока первая " ".

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

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

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

$foo = current(array_slice(explode(...), 2));   // element [2]
 11
Author: mario, 2011-03-30 20:31:43

( Не совсем ответ как таковой - другие ответили довольно хорошо)


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

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

<?php
function foo() {
    return array(1, 2, 3);
}
echo foo()[2]; // prints 3
?>
 2
Author: Pascal MARTIN, 2011-03-30 20:27:46

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

Его одна строка:

<?php

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

?>

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

 1
Author: Neal, 2011-03-30 20:25:16

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

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

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

 1
Author: Winfield Trail, 2011-03-30 20:28:14

Только с одним выражением, которое я могу придумать:

echo list($a) = explode(' ', 'a b c') ? $a : '';
echo list($_, $b) = explode(' ', 'a b c') ? $b : '';
 0
Author: joksnet, 2011-03-30 20:28:25

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

function firstWord($string) {
  $foo = explode(" ", $string);
  return $string;
}
 0
Author: Prydie, 2011-03-30 20:28:59

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

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

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

 0
Author: Adam, 2011-03-30 20:32:25

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

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

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

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

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

 0
Author: Mr. Llama, 2011-03-30 21:11:25

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

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

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

 0
Author: dqhendricks, 2011-03-30 22:09:39