2007. 07. 31, kedd keltezéssel 11.29-kor Ken Tozier ezt írta: > Turns out that objects returned from SQL queries contain two parts > for every field, one with a string key and one with an index key. > Adding an "is_numeric" test on the keys allows you to filter out the > numeric keys if you want to. For example: thats the documented behaviour of mysql_fetch_array. but you do have mysql_fetch_assoc and mysql_fetch_row at hand, which return an array with one method of indexing only see: http://hu.php.net/mysql_fetch_array I don't know what your "$this->db->query($query)" uses, but you could look there... greets Zoltán Németh > > foreach ($row as $key => $value) > { > if (!is_numeric($key)) > { > /* do stuff here */ > } > } > > Ken > > > On Jul 31, 2007, at 10:35 AM, Ken Tozier wrote: > > > Hi > > > > I think this is probably just a misunderstanding on my part, but > > I'm creating associative arrays with string keys from MySQL query > > results and when I put a value in the array, I get the expected key > > association along with an index key that has a different value. > > > > For example: If I have a table "Foo," do a select, perform > > coersions on the results, and place the coerced value in an array > > with a key, a second uncoerced value is also placed in the array > > with an index key. I know all associative arrays have both key and > > index accessors, but I would think that the values should be the same. > > > > Here's the full function. > > (Note: The line where values are added to the array is: "$fields > > [$key] = $value;" after the "coersions" switch statement) > > > > function query_database($inQuery) > > { > > $query = $inQuery; > > $coersions = null; > > $object_key = null; > > $group_by_key = null; > > > > if (is_array($inQuery)) > > { > > $query = $inQuery['query']; > > $coersions = $inQuery['coersions']; > > $object_key = $inQuery['object_key']; > > $group_by_key = $inQuery['group_by_key']; > > } > > > > try > > { > > // determine query type > > if (strpos($query, 'insert') === false) > > { > > $rows = array(); > > $rowCounter = 0; > > > > foreach ($this->db->query($query) as $row) > > { > > $fields = array(); > > $recordKey = $rowCounter; > > > > foreach ($row as $key => $value) > > { > > // remember this key if it matches the user specified object key > > if (($object_key != null) && ($key == $object_key)) > > $recordKey = $value; > > > > // perform user specified coersions > > if ($coersions != null) > > { > > switch ($coersions[$key]) > > { > > case 'integer': > > $value += 0; > > break; > > > > case 'float': > > $value += 0.0; > > break; > > > > case 'datetime': > > $value = new date_object($value); > > break; > > > > case 'base64_decode': > > $value = base64_decode($value); > > break; > > > > case 'hex_decode': > > $value = $this->hex_decode($value); > > } > > } > > > > $fields[$key] = $value; > > } > > > > // perform grouping if requested > > if ($group_by_key == null) > > $rows[$recordKey] = $fields; > > else > > { > > $groupKey = $fields[$group_by_key]; > > > > if ($rows[$groupKey] == null) > > $rows[$groupKey] = array(); > > > > $rows[$groupKey][] = $fields; > > } > > > > $rowCounter++; > > } > > > > var_dump($rows); > > } > > else > > { > > // return last insert ID > > return ($this->db->lastInsertId() + 0); > > } > > } > > catch (PDOException $error) > > { > > print "Error!: " . $error->getMessage() . "<br/>"; > > die(); > > } > > } > > > > And here's some sample output > > > > array(6) { > > ["task_id"]=> > > int(22) > > [0]=> > > string(2) "22" > > ["container_id"]=> > > int(3784) > > [1]=> > > string(4) "3784" > > ["name"]=> > > string(12) "108-6972.XTG" > > [2]=> > > string(24) "3130382D363937322E585447" > > } > > > > Note how the named fields differ from their corresponding index > > fields. > > > > task_id=> int(22) while [0]=> string(2) "22" > > container_id=> int(3784 while [1]= > string(4) "3784" > > name=> string(12) "108-6972.XTG" while [2]=> string(24) > > "3130382D363937322E585447" > > > > Why is that? Is there any way to fix this without coercing the same > > value twice? Once for the key accessor and once for the index > > accessor? > > > > Thanks In advance > > > > Ken > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, visit: http://www.php.net/unsub.php > > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php