2011-01-12 15 views
10

en este código Trato de desarmar primero y último elemento de la matriz de estado $
a desarmado, pero el último artículo que he intentado lugar puntero emabrgo en $ final
no desarmar ¿qué puedo hacer para este ¿razón?
desarmar último elemento de la matriz

 

$item[$fieldneedle] = " node_os_disk_danger "; 
$status = preg_split('/_/',$item[$fieldneedle]); 
unset($status[0]); 
$end = & end($status); 
unset($end); 
 


en este ejemplo que necesito os_disk

Respuesta

46
array_shift($end); //removes first 
array_pop($end); //removes last 
+0

oh sí como soy tonta se me olvidó la matriz emergente – AmirModiri

+0

referencias: http: // php .net/manual/es/function.array-pop.php y http://php.net/manual/en/function.array-shift.php de php.net –

2

Uso explode en lugar de preg_split. Es mas rapido. Luego puede usar array_pop y array_shift para eliminar un elemento del final y el comienzo de la matriz. Luego, use implode para volver a juntar los elementos restantes.

Una mejor solución sería utilizar str_pos para encontrar la primera y la última _ y utilizar substr para copiar la parte entre medio. Esto causará solo una copia de aguijón, en lugar de tener que transformar una cadena en una matriz, modificarla y unir la matriz en una cadena. (¿O no necesitas unirlos? El 'Necesito' os_disk 'al final me confunde).

+0

cuerpos de tanques, pero quiero ahora cómo puedo hacer esto en expresiones regulares en el recorte de cuerdas desde el primero y el último ¿tienes alguna idea? – AmirModiri

1
$item[$fieldneedle] = " node_os_disk_danger "; 
$status = preg_split('/_/',$item[$fieldneedle]); 
$status = array_slice($status, 1, -1); 
0

Con expresiones regulares, que puede hacer:

$item[$fieldneedle] = preg_replace("/^[^_]+_(.+)_[^_]+$/", "$1", $item[$fieldneedle]); 

expresiones regulares:

^  : begining of the string 
[^_]+ : 1 or more non _ 
_  : _ 
(.+)  : capture 1 or more characters 
_  : _ 
[^_]+ : 1 or more non _ 
$  : end of string 
+0

gracias cuerpo es una buena explicación para mí – AmirModiri

+0

@ircmaxcell: No, no lo es, porque la expresión regular coincide, después del grupo de captura, con un '_' seguido de un NON' _' – Toto

1

Bueno, si desea que el resultado sea una cadena, ¿por qué molestarse en convertir a una cadena?

$regex = '#^[^_]*_(.*?)_[^_]*$#'; 
$string = preg_replace($regex, '\\1', $string); 

Sustituye todo hasta e incluyendo el primer carácter de subrayado, y todo lo que después e incluyendo el último carácter de subrayado. Agradable, fácil y eficiente ...

0

También se puede utilizar para eliminar desarmar último o cualquier artículo con llave

unset($status[0]); // removes the first item 
unset($status[count($status) - 1]); // removes the last item 
Cuestiones relacionadas