В моем случае я хотел получить число 188 из URL-адреса, а остальная часть URL-адреса была статической, поэтому в итоге я использовал метод substr, но для динамической версии, где длина может измениться, приведенный выше метод array_get - это быстрый и чистейший.

могу получить следующий код для работы?

$ a = explode ('s', $ str) [0];

Я вижу только решения, которые выглядят так:

$ a = взорваться ('s', $ str); $ А = $ а [0];

Ответы на вопрос(4)

использованиеcurrent

$a = current(explode('s', $str));

но я нашел это некрасиво

Вы можете использовать это:

$a = array_shift(array_slice(explode("s", $str), 0, 1)));

Это лучший способ, который я нашел, чтобы получить конкретный элемент из массива из Explode.

Сломать:

Explode возвращает массив по разделителюarray_slice($arrayname, $offset, $length) дает новый массив со всеми элементами со смещением, длинойarray_shift($array) дает вам первый (и в данном случае единственный) элемент в массиве, переданный ему.

Это не выглядит красиво, но делает так же, как:

$a = explode('s', $str)[0];

Должен быть лучший способ сделать это, но я не нашел это.

Обновить: Я занимался этим, потому что хотел извлечь часть 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, но для динамической версии, где длина может измениться, приведенный выше метод array_get - это быстрый и чистейший.

Решение Вопроса

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' ) );

Любой из этих вариантов будет работать.

РЕДАКТИРОВАТЬ Другой способ будет использоватьlist() (видетьPHP документ). С его помощью вы можете получить любой элемент:

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.

РЕДАКТИРОВАТЬ: PHP 5.4 будет поддерживать разыменование массива, поэтому вы сможете сделать:

$first_element = explode(',','A,B,C')[0];
 Bailey Parker12 янв. 2011 г., 06:35
см. правки моего сообщения для получения дополнительной информации об этом и другом способе
 kusanagi10 янв. 2011 г., 10:00
но все работает, если мне нужен первый элемент, а не второй

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

 Ring Ø09 янв. 2011 г., 14:37
Это, к сожалению, правильно, и это многое говорит о том, как разработан язык :-(

Ваш ответ на вопрос