首页 > 解决方案 > 从 PHP 中的选定选项返回多维数组键

问题描述

我在 PHP 中大致是新手,我试图在用户选择的选择选项列表内的表中显示多维数组的内容。我想要做的是将所选选项的数组键返回到一个新变量中,例如 $keyref = key($myarray);这样我就可以使用该键在表内显示,但我不知道如何。我是否使用列表onChange=function()中的javascript 函数<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)方法,但只返回了数组作为字符串通知。

标签: phparraysmultidimensional-arrayarray-key

解决方案


首先,你要明白 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<select name="shirtlist">的值(意味着$_GET["shirtlist"]当表单的方法是时可以访问该值GET)。

此代码需要用户执行操作以使用选择更新页面。

我还添加了一个selected属性,select以便选择显示的文章(当迭代索引与请求的shirtlist值相同时)。

在这里仔细检查 if(isset($_GET["shortlist"]) && isset($tshirt[$_GET["shirtlist"]])) {以确保所选项目在列表中,因为任何人都可以访问 URL,因此可以手动更改值,将表单方法更改为POST然后使用$_POST全局数组访问值更安全的$_GET一个。


推荐阅读