10

Is it possible to delete all array elements after an index?

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

now some "magic"

$myArray = delIndex(30, $myArrayInit);

to get

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

due to the keys in $myArray are not successive, I don't see a chance for array_slice()

Please note : Keys have to be preserved! + I do only know the Offset Key!!

0

5 Answers 5

28

Without making use of loops.

<?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);

Output :

Array
(
    [1] => red
    [30] => orange
    [25] => velvet
)
Sign up to request clarification or add additional context in comments.

3 Comments

I think your answer is more good coz it preserve the key association :)
Thanks sankar to let me notice the 4th arg of array_slice :)
guys, you are so phantastic!!! Thank you VERY VARY VERY VERY MUCH!!!
5

Try

$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);

See demo

8 Comments

But the keys are not preserved.
If the OP doesn't care about it, then yours is the best :)
that does delete the prev elements, not the following
Ooops.. I will update my answer
@viktor have updated my answer. But Sankar deserves the correct answer
|
2

I'd iterate over the array up until you reach the key you want to truncate the array thereafter, and add those items to a new - temporary array, then set the existing array to null, then assign the temp array to the existing array.

Comments

1

This uses a flag value to determine your limit:

$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);

1 Comment

+1 The above code also preserves the key-association and also no array functions were used !
0

Try this:

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

This code is not tested

1 Comment

Code only answers are low value on SO.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.