Php | Remove element from reordering array?

How can I remove an element of an array and subsequently reorder without having an empty element in the array?

<?php $c = array( 0=>12,1=>32 ); unset($c[0]); // will distort the array. ?> 

Answer / solution: array array_values ​​(array $ input).

 <?php $c = array( 0=>12,1=>32 ); unset($c[0]); print_r(array_values($c)); // will print: the array cleared ?> 
+9
arrays pointers php return unset
source share
7 answers
 array_values($c) 

will return a new array with only linearly indexed values.

+14
source share

If you always delete the first element, use the array_shift () function instead of unset ().

Otherwise, you can use something like $ a = array_values ​​($ a).

+4
source share

Another option would be array_splice (). This reorders the numeric keys and appears to be faster if you crunch enough data to leave. But I like unset () array_values ​​() for readability.

 array_splice( $array, $index, $num_elements_to_remove); 

http://php.net/manual/en/function.array-splice.php

Speed ​​test:

  ArraySplice process used 7468 ms for its computations ArraySplice spent 918 ms in system calls UnsetReorder process used 9963 ms for its computations UnsetReorder spent 31 ms in system calls 

Security Code:

 function rutime($ru, $rus, $index) { return ($ru["ru_$index.tv_sec"]*1000 + intval($ru["ru_$index.tv_usec"]/1000)) - ($rus["ru_$index.tv_sec"]*1000 + intval($rus["ru_$index.tv_usec"]/1000)); } function time_output($title, $rustart, $ru) { echo $title . " process used " . rutime($ru, $rustart, "utime") . " ms for its computations\n"; echo $title . " spent " . rutime($ru, $rustart, "stime") . " ms in system calls\n"; } $test = array(); for($i = 0; $i<100000; $i++){ $test[$i] = $i; } $rustart = getrusage(); for ($i = 0; $i<1000; $i++){ array_splice($test,90000,1); } $ru = getrusage(); time_output('ArraySplice', $rustart, $ru); unset($test); $test = array(); for($i = 0; $i<100000; $i++){ $test[$i] = $i; } $rustart = getrusage(); for ($i = 0; $i<1000; $i++){ unset($test[90000]); $test = array_values($test); } $ru = getrusage(); time_output('UnsetReorder', $rustart, $ru); 
+2
source share

If you remove only the first element of the array, you can use array_shift($c);

+1
source share

array_shift () shifts the first value of the array and returns it, reducing the array by one element and moving everything down. All the numeric keys of the array will be changed to start counting from scratch until the literal keys are affected.

array_shift ($ stack);

Example:

 $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); print_r($stack); 

Output:

 Array ( [0] => banana [1] => apple [2] => raspberry ) 

Source: http://php.net/manual/en/function.array-shift.php

0
source share
 $array=["one"=>1,"two"=>2,"three"=>3]; $newArray=array_shift($array); return array_values($newArray); 

return [2,3] array_shift remove first element from array array_values ​​returns only values

0
source share

Or reset(); also a good choice

-one
source share

All Articles