Создать PHP массив из колонки MySQL - PullRequest
17 голосов
/ 08 октября 2009

mysql_fetch_array даст мне массив извлеченной строки. Каков наилучший способ создать массив из значений всех строк в одном столбце?

Редактировать: много хороших ответов. Спасибо всем, кто ответил! Я закончил тем, что выбрал решение, подобное тому, что предложили Гамбо и GSto. Я дал баллы за ответ GSto, потому что у него меньше баллов (просто помогаю маленькому парню, ничего личного).

Ответы [ 10 ]

30 голосов
/ 08 октября 2009

вы можете перебрать массив и создать новый, например:

$column = array();

while($row = mysql_fetch_array($info)){
    $column[] = $row[$key];
//Edited - added semicolon at the End of line.1st and 4th(prev) line

}
8 голосов
/ 08 октября 2009

Нет функции сделать это с помощью расширения mysql, вы можете сделать это:

$result = array();
while ($row = mysql_fetch_array($r, MYSQL_NUM)) {
    $result[] = $row[0];
}

Очевидно, что извлечение столбцов в числовом индексированном массиве намного быстрее, и здесь нет никакой реальной выгоды иметь формат ассоциативного массива.

4 голосов
/ 08 октября 2009

Перебрать результат:

$result = mysql_query(...);
$data = array();
while ($row = mysql_fetch_array($result)) {
    array_push($data, $row["columnyouwant"]);
}
4 голосов
/ 08 октября 2009

Используйте цикл while, чтобы получить записи и сохранить их в массиве:

$array = array();
while ($row = mysql_fetch_array()) {
    $array[] = $row['column-x'];
}
2 голосов
/ 08 октября 2009
$result = mysql_query("SELECT columnname FROM table WHERE x=y");

$columnValues = Array();

while ( $row = mysql_fetch_assoc($result) ) {

  $columnValues[] = $row['columnname'];

}
1 голос
/ 25 марта 2012
// I'm using this for years and it works very good !! it's easy and logic
$translate = array();

while ($row = mysql_fetch_assoc($result))
  {
      $cullomnkey = $row['translshort']; // is what you want the key to be 
      $translate[$cullomnkey] = $row[$language]; // this is the key and the value in the array 
  }
0 голосов
/ 12 октября 2013

Если вам не нужна другая информация в этой таблице, вы можете запросить только тот столбец, который вам нужен, и это делает все это более простым:

$query = mysql_query("SELECT * FROM table WHERE id='$int' LIMIT 1");
$column = array();
$column  = mysql_fetch_array($query);
0 голосов
/ 07 мая 2013

вы можете сделать это:

        $columns = array();
        $i=1;
        while( $row = mysql_fetch_array($sql) )
           {
              $columns [$i]=$row['value'];
              $i++;
           }
0 голосов
/ 25 апреля 2013
$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
0 голосов
/ 08 октября 2009

Если вы используете PDO вместо php-mysql, возвращаемое значение PDO :: query () реализует интерфейс Traversable, то есть вы можете использовать его, например. с foreach () (в отличие от ресурса результатов mysql, который вы получаете из mysql_query).

foreach( $pdo->query('SELECT x,y,z FROM foo') as $row ) {

И в случае, если этого недостаточно, и вам действительно нужен массив (т.е. get_class ($ x) === 'Array'), есть метод fetchAll () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...