Я примерно новичок в PHP, и я пытаюсь отобразить содержимое многомерного массива в таблице, которая была внутри списка параметров выбора, который был выбран пользователем. Я пытаюсь сделать так, чтобы ключ массива выбранного параметра возвращался в новую переменную, такую как $keyref = key($myarray);, чтобы я мог использовать ключ для отображения внутри таблицы, но я не знаю, как это сделать. Использую ли я функцию javascript, такую как onChange=function() в списке <select>?
Вот код:
<?php
$tshirt = array (
array("T-shirt A",15,"XS"),
array("T-shirt B",20,"S"),
array("T-shirt C",25,"M")
); //array("t-shirt type", price, "size")
$keyRef = 0; //the variable that will contain the selected array key
echo "<select id='shirtlist'>";
foreach($tshirt as $value){
echo "<option value='$value)'>$value[0]</option>";
}
echo "</select>";
echo "<p>Details of T-shirt:</p>";
echo "<table>";
echo "<tr>";
echo "<th>T-shirt Type</th>";
echo "<th>Price</th>";
echo "<th>Size</th>";
echo "</tr>";
echo "<tr>";
echo "<td>".$tshirt[$keyRef][0]."</td>";
echo "<td>".$tshirt[$keyRef][1]."</td>";
echo "<td>".$tshirt[$keyRef][2]."</td>";
echo "</tr>";
echo "</table>";
?>
В таблице удается отображать данные первого массива, но ничего не происходит, когда я выбираю другие параметры. Что касается использования функции javascript, я попробовал метод json_encode($myarray), но он вернул только уведомление Array as String.






Прежде всего, вы должны понимать, что PHP выполняется только на стороне сервера, что означает отсутствие взаимодействия между кодом PHP и действием, которое вы выполняете в браузере.
Единственный способ вернуться к PHP — отправить новый запрос.
В зависимости от того, что вы хотите сделать и какой рабочий процесс вы хотите использовать в браузере, вы должны выбирать между чистым PHP (каждое действие должно выполняться с запросом клиент-сервер) или использованием javascript (непосредственно выполняется в браузере).
В чистом PHP ваша функция может быть достигнута с помощью следующего кода:
<?php
$tshirt = array (
array("T-shirt A",15,"XS"),
array("T-shirt B",20,"S"),
array("T-shirt C",25,"M")
); //array("t-shirt type", price, "size")
$keyRef = 0; //the variable that will contain the selected array key
if (isset($_GET["shortlist"]) && isset($tshirt[$_GET["shirtlist"]])) {
$keyRef = $_GET["shirtlist"];
}
echo "<form method='GET'>";
echo "<select name='shirtlist'>";
foreach($tshirt as $key => $value){
$selected = '';
if ($key == $keyRef) {
$selected = 'selected';
}
echo "<option value='$key' $selected>".$value[0]."</option>";
}
echo "</select>";
echo "<input type='submit' value='submit'/>";
echo "</form>";
echo "<p>Details of T-shirt:</p>";
echo "<table>";
echo "<tr>";
echo "<th>T-shirt Type</th>";
echo "<th>Price</th>";
echo "<th>Size</th>";
echo "</tr>";
echo "<tr>";
echo "<td>".$tshirt[$keyRef][0]."</td>";
echo "<td>".$tshirt[$keyRef][1]."</td>";
echo "<td>".$tshirt[$keyRef][2]."</td>";
echo "</tr>";
echo "</table>";
?>
Обратите внимание, что я использую глобальный $_GET для получения информации из строк запроса URL. Эта информация передается в PHP при нажатии кнопки отправки формы, а затем значение выбора доступно в нем с помощью атрибута name тега (<select name = "shirtlist"> означает, что значение доступно в $_GET["shirtlist"], когда метод формы GET).
Этот код требует действия от пользователя для обновления страницы с выбором.
Я также добавил атрибут selected к select, чтобы выбрать отображаемую статью (когда индекс итерации совпадает с запрошенным значением shirtlist).
Двойная проверка if (isset($_GET["shortlist"]) && isset($tshirt[$_GET["shirtlist"]])) { предназначена для того, чтобы убедиться, что выбранный элемент находится в списке, поскольку URL-адрес доступен для всех, можно вручную изменить значение, более безопасно изменить метод формы на POST, а затем получить доступ к значению с помощью $_POST глобальный массив вместо $_GET.
HTML-код:
<?php
$tshirt = array (
array("T-shirt A",15,"XS"),
array("T-shirt B",20,"S"),
array("T-shirt C",25,"M")
); //array("t-shirt type", price, "size")
?>
<!-- here we create a select box -->
<select class = "" id = "shirtlist">
<option value = "" selected>select</option>
<!-- add the key varible into foreach loop that give the index of the value -->
<?php foreach($tshirt as $key => $value){ ?>
<option value = "<?=$key?>"><?=$value[0]?></option>";
<?php } ?>
</select>
<p>Details of T-shirt:</p>
<table>
<tr>
<th>T-shirt Type</th>
<th>Price</th>
<th>Size</th>
</tr>
<tr>
<!-- Here we are created the empty table Data will be field after user select any option -->
<td class = "type"></td>
<td class = "price"></td>
<td class = "size"></td>
</tr>
</table>
Добавьте Jquery CDN:
<script src = "https://code.jquery.com/jquery-3.5.1.min.js" integrity = "sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0 = " crossorigin = "anonymous"></script>
Код Javascript/Jquery:
<script type = "text/javascript">
/* we we convert the PHP array into Javascript array using JSON.parse function */
var data = JSON.parse('<?=json_encode($tshirt)?>');
/* This is the code when user change the option in select box then it will add/replace the data into table */
$('#shirtlist').change(function(e){
var key = $(this).val();
$('.type').text(data[key][0]);
$('.price').text(data[key][1]);
$('.size').text(data[key][2]);
});
это сделает работу.
в событии изменения окна выбора оно добавит/заменит данные в таблицу.
это не работает для меня, мне нужно добавить функцию javascript в отдельный файл, а не в тот же файл php?
Да @ShukriLukman Просто поместите весь код в один файл PHP, и он начнет работать.
Здесь вам нужен Javascript и AJAX. PHP не может быть выполнен на клиенте. Он не знает об изменениях выбора, которые вы делаете.