2011-01-12 15 views
10

w tym kodzie próbuję wyłączonym pierwszego i ostatniego elementu tablicy $ stanu
na wyłączony, ale ostatniego elementu, który próbowałem miejsce Thier wskaźnik w $ końca
nie rozbrojony, co mogę zrobić dla tego powód?
wyłączony ostatni element tablicy

 

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


w tym przypadku muszę os_disk

Odpowiedz

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

oh tak jak ja jestem głupi zapomniałem pop tablicy – AmirModiri

+0

Referencje: http: // php .net/manual/pl/function.array-pop.php i http://php.net/manual/en/function.array-shift.php z php.net –

2

Korzystając explode zamiast preg_split. To jest szybsze. Następnie można użyć array_pop i array_shift, aby usunąć element z końca i początku tablicy. Następnie użyj implode, aby ponownie połączyć pozostałe elementy.

Lepszym rozwiązaniem byłoby użycie str_pos, aby znaleźć pierwszą i ostatnią _ i użyć substr, aby skopiować część między nimi. Spowoduje to tylko jedną kopię żądła, zamiast konieczności przekształcenia łańcucha znaków w tablicę, zmodyfikuj ją i umieść tablicę w łańcuchu. (Czy nie musisz ich łączyć? "Potrzebuję" os_disk "na końcu dezorientuje mnie).

+0

ciał zbiorników, ale chcę teraz jak to zrobić to w regexp na stringach od pierwszego i ostatniego masz jakiś pomysł? – AmirModiri

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

Z regex, można zrobić:

$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

dziękuję ciału to mi dobrze wytłumaczyć – AmirModiri

+0

@ircmaxcell: Nie, nie jest, ponieważ dopasowanie regex, po grupie przechwytywania, "_", po którym następuje pewne NON '_' – Toto

1

Cóż, jeśli chcesz wynikiem będzie ciąg, po co konwersji na ciąg?

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

Zastępuje wszystko do pierwszej znaku podkreślenia i włącznie z nim, a także wszystko, co zawiera ostatni znak podkreślenia. Miły, łatwy i skuteczny ...

0

Można również użyć rozbrojony, aby usunąć ostatni lub dowolny element z kluczowych

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