PHP: Como excluir todos os elementos da matriz após um índice

É possível excluir todos os elementos da matriz após um índice?

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

agora uma “magia”

 $myArray = delIndex(30, $myArrayInit); 

para obter

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

devido às chaves em $myArray não são sucessivas, não vejo uma chance para array_slice()

Please note : as chaves devem ser preservadas! + Eu só conheço a chave Offset!

Sem fazer uso de loops.

 '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 ) 

Experimentar

 $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 "
"; print_r($arr);

Veja demo

Eu iria iterar sobre a matriz até chegar a chave que você deseja truncar a matriz depois disso, e adicionar esses itens para uma nova – matriz temporária, em seguida, defina a matriz existente como nula e, em seguida, atribua a matriz temporária à matriz existente.

Isso usa um valor de sinalizador para determinar seu limite:

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

Tente isso:

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

Este código não foi testado