取消设置数组的最后一项

时间:2011-01-12 12:51:43

标签: php regex arrays

在这段代码中我尝试取消设置$ status数组的第一个和最后一个项目 取消设置,但我尝试将最后一项放在$ end中 因为这个原因我不能做什么?


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


在这个例子中,我需要os_disk

6 个答案:

答案 0 :(得分:52)

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

答案 1 :(得分:2)

使用explode代替preg_split。它更快。 然后,您可以使用array_poparray_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