Ответ 1
array_shift($end); //removes first
array_pop($end); //removes last
в этом коде я пытаюсь отменить первый и последний элемент $status array
для отмены, но последний элемент, который я попробовал, разместил его указатель в $end
не отмените, что я могу сделать по этой причине?
$item[$fieldneedle] = " node_os_disk_danger ";
$status = preg_split('/_/',$item[$fieldneedle]);
unset($status[0]);
$end = & end($status);
unset($end);
в этом примере мне нужно os_disk
array_shift($end); //removes first
array_pop($end); //removes last
Используйте explode
вместо preg_split
. Это быстрее.
Затем вы можете использовать array_pop
и array_shift
для удаления элемента с конца и начала массива. Затем используйте implode
, чтобы снова вернуть остальные элементы.
Лучшим решением было бы использовать str_pos
для поиска первого и последнего _
и использовать substr
для копирования детали между ними. Это вызовет только одну копию, вместо того, чтобы преобразовать строку в массив, изменить ее и поместить массив в строку. (Или вам не нужно их совмещать? "Мне нужно" os_disk "в конце меня смущает).
$item[$fieldneedle] = " node_os_disk_danger ";
$status = preg_split('/_/',$item[$fieldneedle]);
$status = array_slice($status, 1, -1);
Ну, если вы хотите, чтобы результат был строкой, зачем беспокоиться о преобразовании в строку?
$regex = '#^[^_]*_(.*?)_[^_]*$#';
$string = preg_replace($regex, '\\1', $string);
Он заменяет все до и включая первый символ подчеркивания и все после и после последнего символа подчеркивания. Хороший, легкий и эффективный...
С помощью регулярного выражения вы можете:
$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
Вы также можете использовать unset для удаления последнего или любого элемента с помощью клавиши
unset($status[0]); // removes the first item
unset($status[count($status) - 1]); // removes the last item