PHP:如何删除索引后所有的数组元素

9

是否可以删除索引之后的所有数组元素?

$myArrayInit = array(1=>red, 30=>orange, 25=>velvet, 45=>pink);

现在是一些 "魔法"。
$myArray = delIndex(30, $myArrayInit);

获取

$myArray = array(1=>red, 30=>orange); 

由于$myArray中的键不是连续的,我认为使用array_slice()的机会很小。

请注意:必须保留键!+ 我只知道偏移键!!

5个回答

27

不使用循环结构。

<?php
    $myArrayInit = [1 => 'red', 30 => 'orange', 25 => 'velvet', 45 => 'pink']; //<-- Your actual array
    $offsetKey = 25; //<--- The offset you need to grab

    //Lets do the code....
    $n = array_keys($myArrayInit); //<---- Grab all the keys of your actual array and put in another array
    $count = array_search($offsetKey, $n); //<--- Returns the position of the offset from this array using search
    $new_arr = array_slice($myArrayInit, 0, $count + 1, true);//<--- Slice it with the 0 index as start and position+1 as the length parameter.
    print_r($new_arr);

输出 :

Array
(
    [1] => red
    [30] => orange
    [25] => velvet
)

4
我认为你的回答更好,因为它保留了关键联系 :) - Nouphal.M
1
感谢Sankar让我注意到array_slice的第四个参数 :) - Nouphal.M
1
你们太棒了!非常非常非常感谢你们!!! - Viktor
1
@Nouphal.M,很高兴听到这个消息,伙计。 :) - Shankar Narayana Damodaran

4

尝试

$arr = array(1=>red, 30=>orange, 25=>velvet, 45=>pink);
$pos = array_search('30', array_keys($arr));
$arr= array_slice($arr,0,$pos+1,true);
echo "<pre>";
print_r($arr);

请查看演示

2
但是键没有被保留。 - Shankar Narayana Damodaran
如果楼主不在意的话,那么你的回答是最好的 :) - Shankar Narayana Damodaran
抱歉..我会更新我的回答 - Nouphal.M
2
@viktor已经更新了我的回答。但Sankar应该得到正确的答案。 - Nouphal.M
@Nouphal.M,如果你将$pos替换为$pos+1,你将得到正确的结果...目前它只显示了“红色”,跳过了“橙色”。 - Shankar Narayana Damodaran
显示剩余3条评论

2

我建议在遍历数组时,直到达到你想截断的键之前,将这些项目添加到一个新的临时数组中,然后将现有数组设置为null,最后将临时数组分配给现有数组。


1
这里使用一个标志值来确定您的限制:
$myArrayInit = array(1=>'red', 30=>'orange', 25=>'velvet', 45=>'pink');

$new_array = delIndex(30,$myArrayInit);

function delIndex($limit,$array){

    $limit_reached=false;

    foreach($array as $ind=>$val){

        if($limit_reached==true){
            unset($array[$ind]);
        }
        if($ind==$limit){
            $limit_reached=true;
        }

    }
    return $array;
}
print_r($new_array);

以上代码还保留了键关联,并且没有使用任何“数组函数”! - Shankar Narayana Damodaran

0

试试这个:

function delIndex($afterIndex, $array){
    $flag = false;
    foreach($array as $key=>$val){
        if($flag == true)
            unset($array[$key]);
        if($key == $afterIndex)
             $flag = true; 
    }
    return $array;
}

这段代码没有经过测试


在SO上,仅有代码的答案价值较低。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接