в этом коде я пытаюсь отменить первый и последний элемент массива $ status
для отмены, но последний элемент, который я попробовал, разместил указатель в $ 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
сunset($status[0]); // removes the first item unset($status[count($status) - 1]); // removes the last item