Как объединить соответствующие строки в массиве? - PullRequest
0 голосов
/ 15 января 2012

Привет, у меня сейчас есть этот код, который извлекает теги из каждого изображения в базе данных.Теги разделяются запятыми.Я помещаю каждый набор тегов в конец массива.Теперь я хочу создать массив извлеченных тегов, но объединить любые дубликаты.

    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 ]

2 голосов
/ 15 января 2012

Ваш вопрос не очень понятен, но 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);
}
1 голос
/ 15 января 2012

Вы, вероятно, хотите что-то вроде этого:

$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 для получения конечного результата.

0 голосов
/ 15 января 2012

Попробуйте это:

$unique_tags = array();
foreach ($tag_array as $value) {
    $unique_tags = array_merge($unique_tags, explode(",", $value);
}
$unique_tags = array_unique($unique_tags);
...