On Monday 10 December 2001 00:36, you wrote: > I have a MySQL query that I want to draw an associative array from - > but I want the 'key' to the array to be the identifying element of > the row, and I'm stuck on how to get what I want. > > For instance: > > Each row in the result set contains an id number, a keyword and a > count related to that keyword. > > so in a 'while' loop I can get an associative array like $row["id"], > $row["word"], etc. with no problem. > > However - later (outside of the 'while' loop) I want to be able, > given the id number, to get the keyword and the count. Like this > pseudo code: > > $id_list(1150, 1160, 1170); > for each $item in $id_list { > print ($item["word"] : $item["count"]); > } > > The idea is that I want a series of associative arrays that might be > otherwise set like... > > $1150["word"] = "Blue"; > $1150["count"] = 12; > $1160["word"] = "Red"; > ...etc.... > > ...except drawn from a MySQL query. > > Any ideas how to achieve this?
Here's what I use (I'm assuming you're PHP). Note on parameters: $dbh is the database handle. If you use the built-in mysql functions then subsitute with a valid mysql connection id. $query is the query $key_field is the name of the field of your "id number" $fields is an array of the names of the fields to include in the result, if empty then include all fields. $stripslash is a boolean to specify whether or not to stripslashes from the results. If you need more explanation let me know. ============================================================ function get_db_array($dbh, $query, $key_field="", $fields="", $stripslash="1") { $result = ""; $sth = $dbh->prepare($query); if ($sth) { $sth->execute(); while ($row = $sth->fetchrow_hash()) { $key_field_val = $row[$key_field]; if ($fields) { reset($fields); while (list($key, $field) = each($fields)) { if (!is_array($field) AND isset($row[$field])) { switch ($stripslash) { case 1 : $result[$key_field_val][$field] = stripslashes($row[$field]); break; case 0 : $result[$key_field_val][$field] = $row[$field]; break; }} else { switch ($stripslash) { case 1 : $result[$key_field_val][$key] = stripslashes($row[$key]); break; case 0 : $result[$key_field_val][$key] = $row[$key]; break; } } }} else { #show_msg("Displaying row"); #get_array_elems($row); $i = 0; while (list($key, $field) = each($row)) { $i++; #echo "Key:$key field:$field<br>"; if (!($i % 2)) { if ($stripslash) { #$result[$key_field_val][$key] = stripslashes($field); echo "Assigned result[$key_field_val][$key]::$result[$key_field_val][$key]<br>"; } $tmp[$key] = stripslashes($field); }#echo "Assigned result[$key_field_val][$key]::$result[$key_field_val][$key]<br>"; } else { #$result[$key_field_val][$key] = $field; echo "Assigned result[$key_field_val][$key]::$result[$key_field_val][$key]<br>"; $tmp[$key] = $field; #echo "Assigned result[$key_field_val][$key]::$result[$key_field_val][$key]<br>"; } } } #get_array_elems($result); $result[] = $tmp; } } return($result); } } ============================================================ -- Jason Wong -> Gremlins Associates -> www.gremlins.com.hk /* Peers's Law: The solution to a problem changes the nature of the problem. */ --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php