¿Cómo puedo obtener el siguiente código para trabajar?PHP explotar y el índice de matriz
$ a = explosión ('s', $ str) [0];
sólo veo soluciones con este aspecto:
$ a = explode ('s', $ cadena); $ a = $ a [0];
¿Cómo puedo obtener el siguiente código para trabajar?PHP explotar y el índice de matriz
$ a = explosión ('s', $ str) [0];
sólo veo soluciones con este aspecto:
$ a = explode ('s', $ cadena); $ a = $ a [0];
Como han dicho otros, PHP es a diferencia de JavaScript en que no puede acceder a elementos de la matriz de rendimientos de función. El segundo método que enlistó funciona. También puede agarrar el primer elemento de la matriz con los current()
, reset()
, o array_pop()
funciones de este modo:
$a = current(explode('s', $str)); //or
$a = reset(explode('s', $str)); //or
$a = array_pop (explode('s', $str));
Si desea eliminar la ligera sobrecarga que explote puede causar debido a múltiples separaciones, se puede establecer su límite a 2 pasando dos después de los otros argumentos. También puede considerar usar str_pos y strstr en su lugar:
$a = substr($str, 0, strpos($str, 's'));
Cualquiera de estas opciones funcionará.
EDIT Otra forma sería usar list()
(ver PHP doc). Con él puedes agarrar cualquier elemento:
list($first) = explode('s', $str); //First
list(,$second) = explode('s', $str); //Second
list(,,$third) = explode('s', $str); //Third
//etc.
Ese no es tu estilo? Siempre se puede escribir una pequeña función auxiliar para agarrar elementos de funciones que devuelven matrices:
function array_grab($arr, $key) { return($arr[$key]); }
$part = array_grab(explode('s', $str), 0); //Usage: 1st element, etc.
EDIT: PHP 5.4 será compatible con gran variedad de eliminación de referencias, por lo que será capaz de hacer:
$first_element = explode(',','A,B,C')[0];
Tiene la razón con su segundo bloque de código. explode
, y otras funciones no pueden devolver una matriz completamente formada para su uso inmediato, por lo que debe establecer una variable temporal. Puede haber un código en el árbol de desarrollo para hacer eso, pero la única forma de obtener los elementos que necesita por ahora es la variable temporal.
Desafortunadamente es correcto, y eso dice mucho sobre cómo se diseña el lenguaje :-( –
Puede utilizar esto:
$a = array_shift(array_slice(explode("s", $str), 0, 1)));
Esta es la mejor manera que he encontrado para obtener un elemento específico de una matriz de explotar.
Desglose:
Explode
devuelve una matriz de delimitadorarray_slice($arrayname, $offset, $length)
le da una nueva matriz con todos los elementos de offset, longitudarray_shift($array)
le da la primera (y en este caso, el único) elemento en la matriz que se le pasó.Este doesen't parecen bastante, pero hace lo mismo que:
$a = explode('s', $str)[0];
Tiene que haber una mejor manera de hacer esto, pero no he encontrado.
Actualizar: estaba investigando esto porque quería para extraer una parte de una dirección URL, así que hice las siguientes pruebas:
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];}
Los resultados fueron los siguientes:
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
En mi caso, quería obtener el número 188 de la url, y todo el resto de la url era estático, así que terminé usando el método substr, pero para una versión dinámica donde lenth puede cambiar, el método array_get anterior es los elementos más limpios
pero todo funciona si necesito el primer elemento, no el segundo – kusanagi
ver las ediciones de mi publicación para obtener más información sobre esta y otra forma –