Как создать массив из базы данных?

Помогите мне создать массив из поля моей БД. В этом поле есть записи, разделенные запятой. Ниже приведена иллюстрация:

ID | article_title_fld | article_tags_fld | ---------------------------------------------------------------------- 1 | Learn PHP | PHP, coding, scripting | 3 | Javascript Tutorial | Javascript, scripting, tutorial | 4 | Styling with CSS | CSS, tutorial, web design | 

Я хочу собрать все записи в article_tags_fld, а затем поместить его в 1 массив. Возможно, я назвал его $ array1 и распечатал, как показано ниже:

 Array ( [0] => PHP [1] => coding [2] => scripting [3] => Javascript [4] => scripting [5] => tutorial [6] => CSS [7] => tutorial [8] => web design ) 

 $array1 = array(); $result = mysql_query("SELECT article_tags_fld FROM MY_TABLE"); while ($row = mysql_fetch_assoc($result)) { $array1 = array_merge($array1, array_map('trim', explode(",", $row['article_tags_fld']))); } 

explode разделит строку на разделитель.

array_merge объединит два массива.

array_map применит обрезку ко всем элементам.

отделка удалит любое свободное пространство с обеих сторон ваших тегов.

Фактически, я сначала нормализовал бы таблицу на несколько таблиц.

статьи

 article_ID | article_title_fld | ---------------------------------------- 1 | Learn PHP | 3 | Javascript Tutorial | 4 | Styling with CSS | 

теги

 tag_ID | tag_title_fld | ------------------------ 1 | PHP | 2 | coding | 3 | scripting | 4 | Javascript | 5 | tutorial | 6 | CSS | 7 | web design | 

article_tags

 article_ID | tag_ID | --------------------- 1 | 1 | 1 | 2 | 1 | 3 | 3 | 4 | 3 | 3 | 3 | 5 | 4 | 6 | 4 | 5 | 4 | 7 | 

а затем в PHP

 $array1 = array(); $result = mysql_query(" SELECT tag_title_fld FROM tags JOIN articles_tags USING(tag_ID) ORDER BY article.article_ID "); foreach($result as $row) { $array1[] = $row['tag_title_fld']; // With count. See below for the query it goes with // $array2 = array(); // $array2['tag'] = $row['tag_title_fld']; // $array2['count'] = $row['tag_count']; // $array1[] = $array2; } 

Конечно, если вам просто нужен список тегов без дубликатов, вы должны использовать этот запрос.

 SELECT tag_title_fld FROM tags 

и если вы хотели, чтобы они подсчитали, как часто они используются:

 SELECT tag_title_fld, COUNT(*) AS tag_count FROM tags JOIN articles_tags USING(tag_ID) GROUP BY tag_title_fld 

ОБНОВЛЕНО

вы также можете сделать это с помощью mysql_fetch_Array

 $array1 = array(); $result = mysql_query("SELECT ID , article_tags_fld FROM my_table"); while ($row = mysql_fetch_array($result, MYSQL_BOTH)) { $array1[] = $row['article_tags_fld']; // OR // $array1[] = $row[1]; } 

ДОБАВЛЕНО: в одной строке:

 // use this version to behave as in your example.. $array1 = array_map('trim',explode(',',implode(',',$array1))); // use this version with array_unique for a non duplicate way... $array1 = array_unique(array_map('trim',explode(',',implode(',',$array1)))); 

DISPLAY:

  print_r( $array1 ); Array ( [0] => PHP [1] => coding [2] => scripting [3] => Javascript [4] => scripting [5] => tutorial [6] => CSS [7] => tutorial [8] => web design ) 

Это должно выводить все.

 $pdo = new PDO( /* CONNECTION */ ); $stmt = $pdo->query( 'SELECT article_tags_fld FROM TABLENAME' ); function mapFunc( $row ){ return explode( ',', $row[ 0 ] ) } $all = array(); foreach( array_map( 'mapFunc', $stmt->fetchAll() ) as $row ) { $all = array_merge( $all, $row ); } // $all now holds all of the values.