Thanks for the replies gents. I have cludged together something from your solutions but it isn't yet working. I've been staring at multi-dim arrays all day and am getting tired, so I'll carry on tomorrow. Thanks again, Alan > -----Original Message----- > From: Jochem Maas [mailto:jochem@xxxxxxxxxxxxx] > Sent: 12 October 2005 19:18 > To: tg-php@xxxxxxxxxxxxxxxxxxxxxx > Cc: php-general@xxxxxxxxxxxxx; lord_alan@xxxxxxxxxxx > Subject: Re: Removing Items from an Array > > Id like to continue where TG left off ... > > hth. > > tg-php@xxxxxxxxxxxxxxxxxxxxxx wrote: > > If I understand what you're asking, then maybe this will help: > > > > $arrset1 = array("Apples" => 3, "Oranges" => 5, "Apricots" => 1); > > $arrset2 = array("Couches" => 6, "Chairs" => 2, "Benches" => 5); > > > > $alldataarr["Fruits"] = $arrset1; > > $alldataarr["Furniture"] = $arrset2; > > > > Say we want to remove "Chairs", and let's do it the hard way: > > > > foreach ($alldataarr as $key => $data) { > > foreach ($data as $subkey => $subdata) { > > if ($subkey == "Chairs) { > > unset($alldataarr[$key][$subkey]); > > } > > } > > } > > > > using foreach $arr as $key => $data you can get the > key/index name as well as the actual value stored in that > part of your array. Then all you have to do is refer back up > to the main array using the current $key/$subkey values as > your indexes. > > > > $filter = array( > 'Fruits' => array('Apples' => 1, 'Oranges' => 1), > 'Furniture' => array('Couches' => 1, 'Chairs' => 1), ); > > $alldataarr = array(); > $alldataarr["Fruits"] = array("Apples" => 3, "Oranges" => 5, > "Apricots" => 1); $alldataarr["Furniture"] = array("Couches" > => 6, "Chairs" => 2, "Benches" => 5); > > foreach ($alldataarr as $key => $data) { > if (!isset($filter[$key]) { > // we want it all;. > continue; > } > $alldataarr[$key]= array_intersect_keys($data, $filter[$key]); } > > > // heres one I prepared earlier: > > > /** > * array_intersect_keys() > * ^--- the internal function (php5.x+?) > has no 's' > * > * returns the all the items in the 1st array whose keys are > found in any of the other arrays > * > * @return array() > */ > function array_intersect_keys() > { > $args = func_get_args(); > $originalArray = $args[0]; > $res = array(); > > if(!is_array($originalArray)) { return $res; } > > for($i=1;$i<count($args);$i++) { > if(!is_array($args[$i])) { continue; } > foreach ($args[$i] as $key => $data) { > if (isset($originalArray[$key]) && !isset($res[$key])) { > $res[$key] = $originalArray[$key]; > } > } > } > > return $res; > } > > > > > > > > Basic example, but I think you can modify this to work with > what you're doing. > > > > Let me know if you have any questions about this example. > > > > -TG > > > > > > > > = = = Original message = = = > > > > Hi all, > > > > I'm really struggling here! I have a large, multi-dimensional array > > that I want to "clean-up" a bit before committing to a database. > > > > I want to remove quite a bit of the array but using the > KEYs not the > > values. I know the keys I want to keep and I know the keys > I want to > > get rid of. I want to keep the structure and sequence of > the array in tact. > > > > All of the array traversing functions in PHP seem to > either: only work > > on the values, or do not allow the removal of elements of the array! > > > > Can anyone offer a clue bat to a tired old array walker! > > > > Thanks > > > > Alan > > > > > > ___________________________________________________________ > > Sent by ePrompter, the premier email notification software. > > Free download at http://www.ePrompter.com. > > > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php