|
Posted by tg-php on 10/13/05 18:38
That works just as well, if you have only two levels of depth. Mostly I was trying to illustrate how to use $key => $value in a foreach and what to do if you need to go multiple levels down. Once you get to the bottom level, then you can use isset() certainly.
Just wanted to make sure that it was clear what to do with $key and $subkey relating to the main array ($alldataarr in this example)
-TG
= = = Original message = = =
Well to give my .02 here.
Why even go through the second foreach? By doing this you are making your code very inefficient in
that it must read through the entire set of arrays. Sure it works fine if you have only a few. But
if there are a few thousand it takes longer.
As the arrays are structures you have the key (Apples", "Oranges", "Apricots", "Couches",
"Chairs", "Benches")
so why not just something like:
<?php
$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:
// Debug
//echo "initial array<pre>";
//print_r($alldataarr);
//echo "</pre>";
$delete_key = "Chairs";
foreach ($alldataarr as $key => $data)
~if (isset($alldataarr[$key][$delete_key]))
~
~~unset($alldataarr[$key][$delete_key]);
~
// Debug
//echo "after array<pre>";
//print_r($alldataarr);
//echo "</pre>";
?>
--- tg-php@gryffyndevelopment.com wrote:
> Thanks for the addition Jochem.. one reason I post here, even if it's a basic example, is
> because if there's a better way or a chance to learn something new, I want to have that
> opportunity. Thanks again!
>
> -TG
>
> = = = Original message = = =
>
> Id like to continue where TG left off ...
>
> hth.
>
> tg-php@gryffyndevelopment.com 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.
> >
>
>
> ___________________________________________________________
> Sent by ePrompter, the premier email notification software.
> Free download at http://www.ePrompter.com.
>
> --
> PHP Windows Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
___________________________________________________________
Sent by ePrompter, the premier email notification software.
Free download at http://www.ePrompter.com.
Navigation:
[Reply to this message]
|