On 3/14/2011 2:02 PM, Jim Lucas wrote: > On 3/14/2011 1:31 PM, Paul M Foster wrote: >> Here's what I need to do: I have an indexed array, from which I need to >> delete elements in the middle. Once completed, the indexes should be >> numerically in sequence, as they were when I first encountered the >> array. That is: >> >> Before: >> $arr = array(0 => 5, 1 => 6, 2 => 7, 3 => 8, 4 => 9, 5 => 10); >> >> After: >> $arr = array(0 => 5, 1 => 6, 2 => 9, 3 => 10); >> >> >> I've tried: >> >> 1) Using for() with unset(). Elements are deleted, but the indexes are >> no longer sequential. >> >> 2) Using for() with array_splice(). Understandably, deletes certain >> elements but not others. >> >> 3) Using foreach() with referenced array elements. Neither unset() nor >> array_splice() appear to have any effect on the array at all. >> >> 4) while() loop using current() and the like. But these array functions >> return values, not references, so the array isn't actually modified. >> >> 5) array_walk() with unset() array_splice(). No effect on the array. >> >> Anyone know how to do this, or know of a reference on how to? >> >> Paul >> > > <?php > > # Setup match array > $match_these = array(7,8); > > # Setup data array > $arr = array(0 => 5, 1 => 6, 2 => 7, 3 => 8, 4 => 9, 5 => 10); > > # Loop data array > foreach ( $arr AS $k => $v ) > { > # Simple matching this may be, but work yes it does > if ( in_array($v, $match_these) ) > { > # Remove matched items > unset($arr[$k]); > } > } > > # Reset array indexes > $arr = array_values($arr); > > # Print it > print_r($arr); > > # $arr will now be array(0 => 5, 1 => 6, 2 => 9, 3 => 10); > > ?> Or you can do the long and more memory intense way. <?php # Setup match array $match_these = array(7,8); # Setup data array $arr = array(0 => 5, 1 => 6, 2 => 7, 3 => 8, 4 => 9, 5 => 10); # Setup new array() $new_arr = array(); # Loop data array foreach ( $arr AS $k => $v ) { # Simple matching this may be, but work yes it does if ( ! in_array($v, $match_these) ) # notice the ! (NOT) { # Remove matched items $new_arr[] = $arr[$k]; } } # Print it print_r($new_arr); # $arr will now be array(0 => 5, 1 => 6, 2 => 9, 3 => 10); ?> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php