Как добавить переменную implode в различные значения текстового поля

У меня есть следующие три страницы кода. Первая страница спрашивает пользователя, какие музыкальные жанры ему нравятся (со временем будет более 20 жанров). На 2-й странице пользователю предлагается ранжировать выбранные жанры, а на 3-й странице сортируется и отображается их рейтинг.

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

<form id="genre" name="genre" method="post" action="musicsell.php">
  <input type="checkbox" name="genre[]" id="Rap" value="Rap"/>Rap<br />
  <input type="checkbox" name="genre[]" id="HipHop" value="HipHop"/>HipHop<br />
  <input type="checkbox" name="genre[]" id="RnB" value="RnB"/>RnB<br />
  <input type="checkbox" name="genre[]" id="Rock" value="Rock"/>Rock<br />
  <input type="checkbox" name="genre[]" id="Jazz"value="Jazz"/>Jazz<br />

  <p>
    <input type="submit" value="Next">
    <br />
  </p>
</form>

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

<form id="form1" name="form1" method="post" action="musicresults.php">
<?php
$name = $_POST['genre'];

if(isset($_POST['genre'])) {
foreach ($name as $genre){

?>

<input type="number" required="required" id="<?php echo $genre ?>" name="music[<?php echo $genre ?>]" max="3" min="1" /><?php echo $genre ?><br /> 

<?php
    }
} 
?>

<input type="submit" name="button" id="button" value="Submit" /></form>

Третья и последняя страница сортирует и повторяет результаты:

<?php
//Get the form results (which has been converted to an associative array) from the $_POST super global
$musicgenres = $_POST['music'];

//Sort the values by rank and keep the key associations.
asort($musicgenres, SORT_NUMERIC );

//Loop over the array in rank order to print out the values.
foreach($musicgenres as $music => $rank)
{
   echo "$music is your $rank choice";
   echo "<br>";
}
?>

Пример результатов:

Рэп – ваш выбор номер один
Хип-хоп – ваш выбор номер два
RnB – ваш выбор номер три

Но как я могу поместить отдельный набор кода на последнюю страницу, чтобы я мог эхо-переменную (например, echo "musicstring = $musicstring";), которая отображала бы результат вроде:

musicstring = рэп, хип-хоп, RnB

Я думаю, что функция implode необходима, но я не уверен.


person user3506743    schedule 14.08.2015    source источник
comment
Нужна ли сортировка списка или вы просто хотите увидеть все элементы списка $musicstring?   -  person Surreal Dreams    schedule 14.08.2015
comment
Привет, сюрреалистичные сны. Список нужно упорядочить.   -  person user3506743    schedule 15.08.2015


Ответы (2)


да, implode это то, что вам нужно:

echo implode(' ,', array_values($musicgenres));
person taxicala    schedule 14.08.2015
comment
implode не добавляет завершающий символ «склеивания», поэтому вы можете пропустить rtrim. - person Surreal Dreams; 14.08.2015
comment
Привет, таксика, добавление вашего кода приводит к 1, 2, 3, а не к рэпу, хип-хоп, RnB - person user3506743; 15.08.2015
comment
Я не заметил, что у вас есть массив пар ключ/значение, я только что отредактировал ответ, добавив значения массива, чтобы вы только взрывали значения массива - person taxicala; 15.08.2015

Отредактировано: Да, функция сжатия вам подойдет.

Функция implode() возвращает строку из элементов массива.

Синтаксис: взорвать (разделитель, массив)

найдите документацию по implode() здесь: http://www.w3schools.com/php/func_string_implode.asp

обновите функцию foreach следующим образом:

foreach($musicgenres as $music => $rank)
{
   array_push($musicstring, $music);   
   echo "$music is your $rank choice";
   echo "<br>";
}

а затем вам, возможно, придется добавить следующий код в последнюю очередь:

 $musicstring = implode(", ", $musicgenres);
 echo $musicstring;

Надеюсь это поможет!

person narainsagar    schedule 14.08.2015
comment
Привет, Нараин, когда я добавил код, я получил неожиданную ошибку '‹', поэтому я удалил теги ‹pre›, но тогда результат был 1, 2, 3, а не Rap, HipHop, RnB. - person user3506743; 15.08.2015
comment
да, не включайте ‹pre› извините, я забыл удалить. и измените функцию foreach на эту: // Перебрать массив в порядке ранжирования, чтобы распечатать значения. foreach($musicgenres as $music =› $rank) { array_push($musicstring, $music); echo $music — ваш выбор $rank; эхо ‹br›; } и тогда это будет работать: $musicstring = implode(, , $musicgenres); эхо $музыкальная строка; - person narainsagar; 15.08.2015
comment
обновил ответ, см. выше. для получения дополнительной информации см. документацию по массиву php здесь: w3schools.com/php/php_arrays.asp - person narainsagar; 15.08.2015
comment
Простой массив не проблема, но при нажатии массива я получаю Предупреждение: array_push() ожидает, что параметр 1 будет массивом, ноль задан - person user3506743; 17.08.2015
comment
похоже, мы не передаем массив в 1-м параметре, компилятор обнаружил, что он равен нулю.. попробуйте объявить переменную перед циклом for для пустого массива. найдите правильный синтаксис в документации w3schools php. $musicstring = array(); // - person narainsagar; 19.08.2015