Результаты Mysql и манипулирование массивом

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

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

У меня проблемы с одним столбцом под названием «теги», используемым для тегов для статей. Но каждая строка выглядит следующим образом и варьируется между ними:

тег tag1 tag2 tag3

или

tag1, tag2, tag

Но мне нужно объединить их и поместить в массив, в котором они перечислены по количеству повторений каждого из них, вот так:

  • тег (2)
  • tag1(2)
  • tag2(2)
  • tag3(1)

Поскольку я не самый сведущий в php, я не уверен, правильно ли я подхожу к проблеме?

Я новичок в манипулировании массивами такого масштаба, поэтому я застрял на этом этапе. Вы можете просмотреть приведенный ниже пример того, что я делаю ниже:

   $sql = "SELECT tags, approved FROM articles WHERE approved = '1' ";
  $result = mysql_query($sql);

 while( $rows = mysql_fetch_array($result) ) { 
  $arr = $rows['tags'];
  $arr = str_replace(", ", " ", $arr); // attempting to clean up the data, so that each word appends with a space.
  $arr = str_replace(" ", " ", $arr);

  // Don't know what to do next, or if this is even the right way to do it.

}
  

Любая помощь приветствуется.

Спасибо, Леа

Комментарии:

1. Я думаю, что я застрял, потому что скрипт выводит массив для каждой строки, и я не уверен, как приступить к манипулированию, и все мои попытки за последний час потерпели неудачу

2. Вы можете преобразовать строку в массив с помощью explode функции.

3. @FrustratedWithFormsDesigner — Верно, но это не имеет отношения к способу форматирования каждой строки данных. Он помещает его в массив, подобный: array() { [0] => tag, tag1, tag3, tag4 [1] => tag, tag2, tag6, tag7 }

Ответ №1:

Возможно, это будет полезно. Измените свой код, чтобы для каждого запроса было $tagArr . Если вам нужен полный массив тегов, это было бы немного по-другому, но его можно легко закодировать, используя следующее.

 while( $rows = mysql_fetch_array($result) ) { 
  $arr = $rows['tags'];
  $arr = str_replace(", ", " ", $arr); // attempting to clean up the data, so that each word appends with a space.

  // Don't know what to do next, or if this is even the right way to do it.

  $tagArr = array();
  $current_tags = explode(" ", $arr);
  foreach($current_tags as $tag) {
    if(!array_key_exists($tag, $tagArr)) {
      $tagArr[$tag] = 1;
    } else {
      $tagArr[$tag] = $tagArr[$tag]  ;
    }
  }

  // now $tagArr has the tag name as it's key, and the number of occurrences as it's value
  foreach($tagArr as $tag => $occurrences) {
    echo $tag . '(' . $occurrences . ')<br />';
  }
}
  

Комментарии:

1. Нет необходимости в str_replace пробел с помощью строки.

2. @Lea обновил код. Я только что просмотрел новый $tagArr массив и повторил информацию. Также удалено ненужное str_replace .

3. Аарон В. — Теперь я понимаю. Спасибо за вашу помощь:)