Помогите мне создать массив из поля моей БД. В этом поле есть записи, разделенные запятой. Ниже приведена иллюстрация:
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.