mysql_fetch_array will give me an array of a fetched row. What's the best way generate an array from the values of all rows in one column?
12 Answers
There is no function to do this using the mysql extension, you can do this:
$result = array();
while ($row = mysql_fetch_array($r, MYSQL_NUM)) {
$result[] = $row[0];
}
It is apparently marginally faster to fetch the columns in a numerically indexed array, and there is no real benefit here to having the associative array format.
Comments
If you use PDO instead of php-mysql the return value of PDO::query() implements the Traversable interface, meaning you can use it e.g. with foreach() (unlike the mysql result resource you get from mysql_query).
foreach( $pdo->query('SELECT x,y,z FROM foo') as $row ) {
And in case this does not suffice and you really, really need an array (i.e. get_class($x)==='Array'), there's the fetchAll() method.
Comments
// I'm using this for years and it works very good !! it's easy and logic
$translate = array();
while ($row = mysql_fetch_assoc($result))
{
$columnkey = $row['translshort']; // is what you want the key to be
$translate[$columnkey] = $row[$language]; // this is the key and the value in the array
}
Comments
Many years later, just another way. I don't know if its performance is better or worse than the while loop method.
For values without commas yo can do:
$res = mysql_query("SELECT GROUP_CONCAT(colname) AS values FROM tablename");
$row = mysql_fetch_assoc($res);
$arrOfValues = explode(',', $row['values']);
For a generic solution, you may use a separator:
$res = mysql_query("SELECT GROUP_CONCAT(colname SEPARATOR '##_sep_##') AS values FROM tablename");
$row = mysql_fetch_assoc($res);
$arrOfValues = explode('##_sep_##', $row['values']);
Comments
$query = mysql_query('SELECT * from yourTable');
function mysql_field_array( $query ) {
$field = mysql_num_fields( $query );
for ( $i = 0; $i < $field; $i++ ) {
$names[] = mysql_field_name( $query, $i );
}
return $names;
}
$fields = mysql_field_array( $query );
$output = implode( ',', $fields ); //outputs the columns names
//echo count( $fields ); //this use if you want count of columns.
$columns = '{\"fields\":\".json_encode($output).\"}';
echo $columns; //for JSON output