在这段代码中我尝试取消设置$ status数组的第一个和最后一个项目 取消设置,但我尝试将最后一项放在$ end中 因为这个原因我不能做什么?
$item[$fieldneedle] = " node_os_disk_danger ";
$status = preg_split('/_/',$item[$fieldneedle]);
unset($status[0]);
$end = & end($status);
unset($end);
在这个例子中,我需要os_disk
答案 0 :(得分:52)
array_shift($end ); //removes first
array_pop($end ); //removes last
答案 1 :(得分:2)
使用explode
代替preg_split
。它更快。
然后,您可以使用array_pop
和array_shift
从数组的结尾处开始删除项目。然后,使用implode
将剩余的项目重新组合在一起。
更好的解决方案是使用str_pos
查找第一个和最后一个_
并使用substr
复制其间的部分。这将只导致一个sting副本,而不必将字符串转换为数组,修改它,并将数组放在一个字符串中。 (或者你不需要把它们放在一起吗?最后'我需要'os_disk'让我感到困惑。)
答案 2 :(得分:1)
$item[$fieldneedle] = " node_os_disk_danger ";
$status = preg_split('/_/',$item[$fieldneedle]);
$status = array_slice($status, 1, -1);
答案 3 :(得分:1)
好吧,如果你想让结果成为字符串,为什么还要转换成字符串呢?
$regex = '#^[^_]*_(.*?)_[^_]*$#';
$string = preg_replace($regex, '\\1', $string);
它取代了包括第一个下划线字符在内的所有内容,以及包含最后一个下划线字符的所有内容。好,简单,高效...
答案 4 :(得分:0)
使用正则表达式,您可以:
$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
答案 5 :(得分:0)
您也可以使用unset删除带有键
的最后一个或任何项目unset($status[0]); // removes the first item
unset($status[count($status) - 1]); // removes the last item