Использование implode, explode и array_unique для автоматического заполнения выпадающего меню из двух столбцов SQL разделенных запятыми ключевых слов

У меня есть база данных SQL с ключевыми словами «категория» (разрешено только одно) и ключевыми словами «вопросы» (несколько слов, разделенных запятыми). Я пытаюсь создать автоматически заполняющееся выпадающее меню выбора ключевых слов, выбрав все ключевые слова из столбцов «категория» и «проблемы», превратив оба возвращаемых массива в разделенные запятыми строки с разгрузкой, затем комбинируя строки и взорвав разделенные запятыми строки в массив, при этом удаляя дубликаты записей с помощью array_unique.

Но это не работает. Я пробовал несколько подходов. Вот мой последний. Он возвращает НЕКОТОРЫЕ значения из столбца, но не все, и я не могу понять, почему. Возможно, array_unique работает не так, как я хочу, или я путаю преобразование в строки и обратно в массив? Есть ли более простой способ сделать это? Я искал по всему и не могу найти хороший пример нигде.

Вот код, который у меня сейчас работает …

<?
$dropdownsql = "SELECT DISTINCT category FROM database";
$keywords = mysql_query($dropdownsql);
while($row = mysql_fetch_array($keywords))
{
echo "<option value=\"".$row['category']."\">".$row['category']."</option>\n  ";
}
?>

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

<?
$dropdownsql = "SELECT DISTINCT category FROM database";
$dropdownsql2 = "SELECT DISTINCT issues FROM database";

//run sql queries separately.  Ideally they would be combined into one right?
$rs = mysql_query($dropdownsql);
$rs2 = mysql_query($dropdownsql2);
$row = mysql_fetch_array($rs);
$raw = mysql_fetch_array($rs2);

//then implode the resulting arrays, placing commas & spaces so they'll match
$rows = implode(", ", $row);
$raws = implode(", ", $raw);

//try to concatenate the strings of comma-separated keywords
$keywordvaluesstring = $rows.$raws;

//then explode the concatenated string back into array
$keywordvalue = explode(", ",$keywordvaluesstring);

//then keep only one copy of duplicated keywords
$values = array_unique($keywordvalue, SORT_REGULAR);

//and finally echo the keywords into a dropdown
foreach($values as $value){
echo "<option value=\"".$value."\">".$value."</option>\n  ";
}
?>

ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО!!!!????

0

Решение

<?
$dropdownsql = "SELECT DISTINCT category FROM database";
$dropdownsql2 = "SELECT DISTINCT issues FROM database";

//run sql queries separately.  Ideally they would be combined into one right?
$rs = mysql_query($dropdownsql);
$rs2 = mysql_query($dropdownsql2);
$keywords = array();
while ($row = mysql_fetch_array($rs)) {
$keywords[] = $row[0];
}
while($raw = mysql_fetch_array($rs2)) {
$keywords = array_merge($keywords, explode(', ', $raw[0]));
}

$values = array_unique($keywords, SORT_STRING);

//and finally echo the keywords into a dropdown
foreach($values as $value){
echo "<option value=\"".$value."\">".$value."</option>\n  ";
}
?>
1

Другие решения

Попробуйте заменить это

//then implode the resulting arrays, placing commas & spaces so they'll match
$rows = implode(", ", $row);
$raws = implode(", ", $raw);

//try to concatenate the strings of comma-separated keywords
$keywordvaluesstring = $rows.$raws;

С этим

$keywordvalue = array_merge($rows, $raws);
0

ДЛЯ ДРУГИХ, КОТОРЫЕ БУДУТ ПРОТИВ ЭТОЙ ЖЕ ПРОБЛЕМЫ, ЗДЕСЬ ЗАКЛЮЧИТЕЛЬНЫЙ РАБОЧИЙ КОД: В БАЗЕ ДАННЫХ «КАТЕГОРИЯ» — ОДИН КЛЮЧЕВОЕ СЛОВО, а «ВЫПУСК» И «СООТВЕТСТВУЮЩИЕ» — КЛЮЧЕВЫЕ РАЗДЕЛЕНИЯ. Благодаря Ксимпсону

<form method="GET" action="#">
<select name="keywords">
<OPTION selected><? echo $keyword1; ?></OPTION>
<?

//define the query (the database connection is accomplished elsewhere btw)
$dropdownsql2 = "SELECT DISTINCT category FROM database";
$dropdownsql = "SELECT DISTINCT issue, relatedissues FROM database";

//runthequery
$rs = mysql_query($dropdownsql);
$rs2 = mysql_query($dropdownsql2);

//create an array to hold the keywords
$allvalues = array();//take the values from category and append to the array
while ($row = mysql_fetch_row($rs2)) {
array_push($allvalues, $row[0]);
}//loop again -- explode creates an array of arrays so we handle in the loop
while ($row = mysql_fetch_array($rs)) {

//for each comma separated string, explode it and append the results
foreach($row as $str) {
$exploded = explode(', ', $str);
array_push($allvalues, $exploded[0]);
}
}

//then keep only one copy of duplicated keywords
$values = array_unique($allvalues, SORT_REGULAR);

//and finally echo the keywords into a dropdown
foreach($values as $value){
echo "<option value=\"".$value."\">".$value."</option>\n  ";
}
?>
0

Я считаю, что это то, что вы хотите.

<?
$dropdownsql = "SELECT DISTINCT category FROM database";
$dropdownsql2 = "SELECT DISTINCT issues FROM database";

$allvalues = array();
while ($row = mysql_fetch_row($rs)) {
array_push($allvalues, $row[0]);
}

while ($row = mysql_fetch_row($rs2)) {
$keywords = explode(',', $row[0]);
foreach($keywords as $word) {
array_push($allvalues, $word);
}
}

//then keep only one copy of duplicated keywords
$values = array_unique($allvalues, SORT_REGULAR);

//and finally echo the keywords into a dropdown
foreach($values as $value){
echo "<option value=\"".$value."\">".$value."</option>\n  ";
}
?>
0
По вопросам рекламы [email protected]