|
Posted by "Alan Lord" on 10/12/05 23:01
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@iamjochem.com]
> Sent: 12 October 2005 19:18
> To: tg-php@gryffyndevelopment.com
> Cc: php-general@lists.php.net; lord_alan@hotmail.com
> Subject: Re: [PHP] Removing Items from an Array
>
> 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.
> >
>
>
Navigation:
[Reply to this message]
|