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

?>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to