2011-01-12 20 views
10

in questo codice cerco di disinserire prima e l'ultima voce di $ array di stato
per disinserire ma l'ultimo elemento che ho provato posto puntatore thier in $ fine
non disinserito cosa posso fare per questo ragionare?
unset ultimo elemento dell'array

 

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


in questo esempio ho bisogno os_disk

risposta

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

oh sì come sono stupido ho dimenticato il pop di matrice – AmirModiri

+0

riferimenti: http: // php .net/manual/it/function.array-pop.php e http://php.net/manual/en/function.array-shift.php da php.net –

2

Uso explode invece di preg_split. È più veloce Quindi è possibile utilizzare array_pop e array_shift per rimuovere un elemento dalla fine e dall'inizio della matrice. Quindi, utilizzare implode per rimettere insieme gli altri elementi.

Una soluzione migliore sarebbe utilizzare str_pos per trovare il primo e l'ultimo _ e utilizzare substr per copiare la parte in mezzo. Ciò causerà solo una copia di sting, invece di dover trasformare una stringa in array, modificarla e mettere insieme l'array in una stringa. (O non hai bisogno di metterli insieme? Il 'Ho bisogno' di os_disk 'alla fine mi confonde).

+0

carri armati ma voglio ora come può fare questo in regexp su string trim dal primo e dall'ultimo hai qualche idea? – AmirModiri

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

Con regex, si può fare:

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

regex:

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

grazie corpo è bene spiegarmi per me – AmirModiri

+0

@ircmaxcell: No non lo è, perché la corrispondenza regolare, dopo il gruppo di cattura, un '_' seguito da alcuni NON' _' – Toto

1

Beh, se si desidera che il risultato sia una stringa, perché preoccuparsi di conversione in una stringa?

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

Sostituisce tutto fino al primo carattere di sottolineatura, e tutto ciò dopo aver compreso l'ultimo carattere di sottolineatura. Bello, semplice ed efficace ...

0

È possibile anche usare unset per rimuovere l'ultimo o qualsiasi elemento con la chiave

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