取消设置数组的最后一项
Posted
技术标签:
【中文标题】取消设置数组的最后一项【英文标题】:unset last item of array 【发布时间】:2011-06-07 19:51:33 【问题描述】:在这段代码中,我尝试取消设置 $status 数组的第一项和最后一项 取消设置,但我尝试的最后一项将指针放在 $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
【讨论】:
参考:php.net/manual/en/function.array-pop.php 和 php.net/manual/en/function.array-shift.php 来自 php.net【参考方案2】:使用explode
代替preg_split
。它更快。
然后您可以使用array_pop
和array_shift
从数组的末尾和开头删除一个项目。然后,使用implode
将剩余的项目重新组合在一起。
更好的解决方案是使用str_pos
查找第一个和最后一个_
并使用substr
复制其间的部分。这将只导致一个 sting 副本,而不必将字符串转换为数组,修改它,然后将数组组合成一个字符串。 (或者你不需要把它们放在一起吗?最后的'我需要'os_disk'让我感到困惑)。
【讨论】:
tanks body 但我现在想知道如何在正则表达式中从第一个和最后一个字符串修剪上做到这一点你有什么想法吗?【参考方案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】:您还可以使用 unset 删除最后一个或任何带有键的项目
unset($status[0]); // removes the first item
unset($status[count($status) - 1]); // removes the last item
【讨论】:
【参考方案6】:使用正则表达式,您可以:
$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
【讨论】:
@ircmaxcell:不,不是,因为正则表达式匹配,在捕获组之后,_
后跟一些非 _
以上是关于取消设置数组的最后一项的主要内容,如果未能解决你的问题,请参考以下文章