Как объединить соответствующие строки в массиве?
Привет у меня в настоящее время есть этот код, который извлекает теги из каждого изображения в базе данных. Теги разделяются запятыми. Я помещаю каждый набор тегов в конец массива. Теперь я хочу создать массив извлеченных тегов, но объединить любые дубликаты.
function get_tags()
{
$tag_array = array();
$query = mysql_query("
SELECT tags
FROM gallery_image
");
while($row = mysql_fetch_assoc($query))
{
$tags = $row['tags'];
$tag_array[] = $tags;
}
echo $tag_array[0] . '<br>' . $tag_array[1] . '<br>' .$tag_array[2];
}
3 ответа
Решение
Вам вопрос не очень понятен, но array_unique
может быть то что тебе нужно?
function get_tags()
{
$query = mysql_query('SELECT tags '.
'FROM gallery_image');
$tag_array = array();
while($row = mysql_fetch_assoc($query))
$tag_array = array_merge($tag_array, explode(',', $row['tags']));
return array_unique($tag_array);
}
Вы, вероятно, хотите что-то вроде этого:
$tags = array(
'one,two',
'one,three',
);
$result = array_unique(array_reduce($tags,
function($curr, $el) {
return array_merge($curr, explode(',', $el));
},
array()));
Что это делает, это обрабатывать каждую строку результата (который я предполагаю, выглядит "tag1,tag2"
) в свою очередь с array_reduce
, разделяя теги explode
и собирая их в промежуточный массив, который имеет только один тег на элемент. Затем дубликаты тегов отфильтровываются с array_unique
для получения конечного результата.
Попробуй это:
$unique_tags = array();
foreach ($tag_array as $value) {
$unique_tags = array_merge($unique_tags, explode(",", $value);
}
$unique_tags = array_unique($unique_tags);