转换为数组后,删除字符串上的元素不起作用

下面的代码解释了如何使用 unset 函数删除元素,我使用了一个字符串并将该字符串转换为数组,现在尝试删除第一个和最后一个元素。但元素不会被删除。帮助将不胜感激


<?php

$string="Cupid";  //orginal string

$stringmod= str_split($string);  //converted the string to an array

$length= count($stringmod); //length of the string

for($i=0; $i<$length; $i++) 

{


    if($i == 0 || $i == $length-1) //condition to be executed

    {

        

        unset($stringmod[$i]); //delete elements

    

    }

    

}

print_r($stringmod);

?>


慕码人2483693
浏览 120回答 2
2回答

慕勒3428872

关于您的代码,您在循环中的length之前缺少$ 。尽管如此:不需要循环遍历数组 - 您可以直接寻址元素。以下将起作用:<?php&nbsp; &nbsp;$string="Cupid";&nbsp; &nbsp;$stringmod= str_split($string);&nbsp; &nbsp;unset($stringmod[count($stringmod)-1]);&nbsp; &nbsp;unset($stringmod[0]);&nbsp; &nbsp;print_r($stringmod);?>函数 array_pop 和 array_shift 将执行相同的操作(从数组中删除最后一个/第一个元素)。如果您想稍后在代码中再次执行此操作,它们会更好(PHP 使用关联数组,因此 $stringmod[0] 仅在开头才是第一个元素 - 当您删除它时,不再有 $stringmod[0 ],因此执行 unset($stringmod[0]) 两次不会删除两个“第一个”元素,而只会删除一个)。所以在这种情况下最好的答案可能是:<?php&nbsp; &nbsp;$string="Cupid";&nbsp; &nbsp;$stringmod= str_split($string);&nbsp; &nbsp;array_pop($stringmod);&nbsp; &nbsp;array_shift($stringmod);&nbsp; &nbsp;print_r($stringmod);?>PS根据安德鲁在我的答案下面的评论,您还可以使用 array_values() 函数重新排序或使用 array_splice() 删除元素(这也会重新排序)。就我个人而言,我不喜欢使用它们,因为它们占用资源,并且在可能的情况下,我不依赖于数组具有幻数的排序索引:)

慕的地8271018

array_shift将从数组中删除第一个元素,重新索引数字键。array_pop将删除最后一个。$string="Cupid";&nbsp; //orginal string$stringmod= str_split($string);&nbsp;array_shift($stringmod);array_pop($stringmod);print_r($stringmod);如果您想通过循环来完成此操作,按照@jibsteroos comment,您几乎已经完成了,您只需要在循环中正确引用测试计数器即可for。
打开App,查看更多内容
随时随地看视频慕课网APP