Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.php > #2938
| From | Jerry Stuckle <jstucklex@attglobal.net> |
|---|---|
| Newsgroups | comp.lang.php |
| Subject | Re: Roll SQL name value query into two-dimensional array |
| Date | 2011-08-21 22:15 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <j2se4d$p91$1@dont-email.me> (permalink) |
| References | <9bd3264a-328b-4e98-8910-1fddd49c6bf4@c14g2000yqk.googlegroups.com> |
On 8/21/2011 9:35 PM, Richard A. DeVenezia wrote:
> I have a query that returns name value pairs in groups.
>
> data
> g n v
> 1 a 1
> 1 b 2
> 1 c 3
> 3 a 10
> 3 b 9
> 3 c 8
>
> want
> x[0] = array('a'=>1,'b'=>2,'c'=>3);
> x[1] = array('a'=>10,'b'=>9,'c'=>8);
>
> this is close but x is ending up empty
>
> $q = 'select g,n,v from some_view order by g,some_seq_id';
> $result = db_query($q); // in drupal
>
> $x=array();
> $map=array();
> $prior_g = -1;
> while ($obj = db_fetch_object($result)) {
> if ($rec->g != $prior_g) {
> //append a new map
> $map=$array();
> $x[] = $map;
> $prior_g = $rec->g;
> }
> // fill in the map as we roll through the name value pairs within
> the group
> $map[$rec->n] = $rec->v;
> }
>
> print "<pre>".print_r($x,1)."</pre>";
>
> shows
> Array
> (
> [0] => Array
> (
> )
>
> [1] => Array
> (
> )
> )
>
>
> So what is going wrong ?
You probably want $x[$rec->g] instead of $x[] - what happens if the
sequence of $rec->g ends up as 1,2,5,9, for instance?
Also, you're creating a new array $map each time you get a new value for
g, but you're inserting a copy of $map into the array then changing the
original. So the copy in the $x array never gets any values.
Personally, I wouldn't even use $map or $prior_g (which assumes the
values will be return in sorted order, which is true here - but will it
always be?).
Also, I'm not real familiar with how Drupal does things, but how about
something like (untested):
$x=array();
while ($obj = db_fetch_object($result)) {
if (!isset($x[$rec->g])) {
$x[$rec->g] = array();
}
// fill in the map as we roll through the name value pairs within
the group
$x[$rec->g][$rec->n] = $rec->v;
}
print "<pre>".print_r($x,1)."</pre>";
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Roll SQL name value query into two-dimensional array "Richard A. DeVenezia" <rdevenezia@gmail.com> - 2011-08-21 18:35 -0700 Re: Roll SQL name value query into two-dimensional array Jerry Stuckle <jstucklex@attglobal.net> - 2011-08-21 22:15 -0400 Re: Roll SQL name value query into two-dimensional array "Peter H. Coffin" <hellsop@ninehells.com> - 2011-08-21 21:50 -0500 Re: Roll SQL name value query into two-dimensional array Jonathan Stein <jstein@image.dk> - 2011-08-22 14:21 +0200
csiph-web