Unset последний элемент массива

в этом коде я пытаюсь отменить первый и последний элемент $status array
для отмены, но последний элемент, который я попробовал, разместил его указатель в $end
не отмените, что я могу сделать по этой причине?


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


в этом примере мне нужно os_disk

Ответ 1

array_shift($end); //removes first
array_pop($end); //removes last

Ответ 2

Используйте explode вместо preg_split. Это быстрее. Затем вы можете использовать array_pop и array_shift для удаления элемента с конца и начала массива. Затем используйте implode, чтобы снова вернуть остальные элементы.

Лучшим решением было бы использовать str_pos для поиска первого и последнего _ и использовать substr для копирования детали между ними. Это вызовет только одну копию, вместо того, чтобы преобразовать строку в массив, изменить ее и поместить массив в строку. (Или вам не нужно их совмещать? "Мне нужно" os_disk "в конце меня смущает).

Ответ 3

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

Ответ 4

Ну, если вы хотите, чтобы результат был строкой, зачем беспокоиться о преобразовании в строку?

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

Он заменяет все до и включая первый символ подчеркивания и все после и после последнего символа подчеркивания. Хороший, легкий и эффективный...

Ответ 5

С помощью регулярного выражения вы можете:

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

регулярное выражение:

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

Ответ 6

Вы также можете использовать unset для удаления последнего или любого элемента с помощью клавиши

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