Возврат ключа многомерного массива из выбранной опции в PHP

Я примерно новичок в 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.

Здесь вам нужен Javascript и AJAX. PHP не может быть выполнен на клиенте. Он не знает об изменениях выбора, которые вы делаете.

El_Vanja 12.12.2020 18:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
294
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Прежде всего, вы должны понимать, что 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?

Shukri Lukman 13.12.2020 05:35

Да @ShukriLukman Просто поместите весь код в один файл PHP, и он начнет работать.

Jayesh Paunikar 13.12.2020 12:09

Другие вопросы по теме