Как я могу получить следующий код для работы?PHP explode and array index
$ a = explode ('s', $ str) [0];
Я вижу только решения вида:
$ а = взрываются ('s', $ строка); $ А = $ а [0];
Как я могу получить следующий код для работы?PHP explode and array index
$ a = explode ('s', $ str) [0];
Я вижу только решения вида:
$ а = взрываются ('s', $ строка); $ А = $ а [0];
Как уже говорили другие, PHP в отличие от JavaScript в том, что он не может получить доступ к элементам массива из функции возвращается. Второй метод, который вы указали, работает. Вы также можете захватить первый элемент массива с current()
, reset()
или array_pop()
функциями следующим образом:
$a = current(explode('s', $str)); //or
$a = reset(explode('s', $str)); //or
$a = array_pop (explode('s', $str));
Если вы хотите, чтобы удалить небольшие накладные расходы, которые взрываются может вызвать из-за многочисленные разделения, вы можете установить его предел равен 2, передавая два после других аргументов. Вы также можете использовать str_pos и strstr вместо:
$a = substr($str, 0, strpos($str, 's'));
Любой из этих вариантов будет работать.
EDIT Другой способ - использовать list()
(см. PHP doc). С его помощью вы можете захватить любой элемент:
list($first) = explode('s', $str); //First
list(,$second) = explode('s', $str); //Second
list(,,$third) = explode('s', $str); //Third
//etc.
Это не ваш стиль? Вы всегда можете написать небольшую вспомогательную функцию, чтобы захватить элементы из функций, которые возвращают массивы:
function array_grab($arr, $key) { return($arr[$key]); }
$part = array_grab(explode('s', $str), 0); //Usage: 1st element, etc.
EDIT: PHP 5.4 будет поддерживать массив разыменования, так что вы сможете сделать:
$first_element = explode(',','A,B,C')[0];
Вы верны ко второму блоку кода. explode
и другие функции не могут вернуть полностью сформированный массив для немедленного использования, поэтому вам нужно установить временную переменную. Для этого может быть код в дереве разработки, но единственный способ получить нужные вам элементы - временная.
Это, к сожалению, правильно, и это говорит о том, как язык разработан :-( –
Вы можете использовать это:
$a = array_shift(array_slice(explode("s", $str), 0, 1)));
Это лучший способ, которым я нашел, чтобы получить определенный элемент из массива от взрыва.
Разбивка:
Explode
возвращает массив на разделителеarray_slice($arrayname, $offset, $length)
дает вам новый массив со всеми элементами офсетных, длинойarray_shift($array)
дает вам первое (и в этом случае, только) в массиве, переданном ему.Это doesen't выглядеть красиво, но делает то же самое, как:
$a = explode('s', $str)[0];
Там должен быть лучший способ сделать это, но я не нашел его.
Update: Я расследовал это, потому что я хотел, чтобы извлечь часть в URL, поэтому я сделал следующие тесты:
function urlsplitTest()
{
$url = 'control_panel/deliveryaddress/188/edit/';
$passes = 1000000;
Timer::reset();
Timer::start();
$x =0;
while ($x<$passes) {
$res = array_shift(array_slice(explode("/", $url), 2, 1));
$x++;
}
Timer::stop();
$time = Timer::get();
echo $res.'<br />Time used on: array_shift(array_slice(explode("/", $url), 2, 1)):'.$time;
Timer::reset();
Timer::start();
$x =0;
while ($x<$passes) {
$res = array_get(explode("/", $url), 2);
$x++;
}
Timer::stop();
$time = Timer::get();
echo $res.'<br />Time used on: array_get(explode("/", $url), 2): '.$time;
Timer::reset();
Timer::start();
$x =0;
while ($x<$passes) {
$res = substr($url, 30, -6);
$x++;
}
Timer::stop();
$time = Timer::get();
echo $res.'<br />Time used on: substr($url, 30, -6): '.$time;
}
function array_get($array, $pos) {return $array[$pos];}
Результаты были следующие:
Time used on: array_shift(array_slice(explode("/", $url), 2, 1)):7.897379
Time used on: array_get(explode("/", $url), 2): 2.979483
Time used on: substr($url, 30, -6): 0.932806
В моем случае я хотел получить номер 188 из URL-адреса, а весь остальной URL был статичным, поэтому я закончил использование метода substr, но для динамической версии, где lenth может измениться, метод array_get выше является быстрым и чистым.
, но все это работает, если мне нужен первый элемент, а не второй – kusanagi
см. Правки моего сообщения для получения дополнительной информации об этом и другом способе –