php - 使用 INT 和字符串的 PHP 循环 - 这是如何工作的?
问题描述
我发布了另一个关于类似主题的问题,但认为这需要一个新问题。我有一个名为汽车的关联数组,它被循环以产生一个字符串。
我不明白的部分是当数组是关联数组并且键是字符串时,循环如何使用 $i 作为 if 语句中的键。如果 if 语句说 $i 是汽车 [0]、汽车 [1]、汽车 [2],那么当键实际上是字符串时,它如何循环,例如汽车 [BMW]、汽车 [梅赛德斯] 或汽车[奥迪]?
有人告诉我这是因为 PHP 的类型很松散,但它仍然没有意义。
请解释发生了什么。
if(!isset($_POST["cars"])){
$carsErr ="Cars must not be left empty";
$invalidData = true;
} else {
$cars = array("BMW"=>0,"Mercedes"=>0,"AUDI" =>0,"Trabant"=>0);
if ($cars == "") {
$carsErr ="Cars must not be left empty";
$invalidData = true;
} else {
$selectedCars = "";
for($i=0; $i < count($cars); $i++)
{
if(isset($_POST["cars"][$i])) {
$cars[$_POST["cars"][$i]] = 1;
//concatenate all cars in the one string.
$theCars = strtoupper ($_POST["cars"][$i]);
switch ($theCars)
{
case "BMW":
$selectedCars .= "BMW, ";
break;
case "MERCEDES":
$selectedCars .= "Mercedes, ";
break;
case "AUDI":
$selectedCars .= "Audi, ";
break;
case "TRABANT":
$selectedCars .= "Trabant, ";
break;
default:
$selectedCars .= $_POST["cars"][$i].", ";
}
}
}
}
}
解决方案
这是我从最初的帖子中学到的东西。
$_POST[cars] 数组看起来像这样:
$_POST[cars] = array (
[0] => BMW,
[1] => Mercedes,
[2] => Audi,
[3] => Trabant
);
$cars 数组看起来像这样:
$cars = array (
BMW => 0,
Mercedes => 0,
Audi => 0,
Trabant => 0
);
因此,它使用for 循环中的 $i 等对$_POST[cars]
数组进行索引。[0],[1],[2]
然后它使用多维数组语法到达$cars[$_POST["cars"][$i]] = 1;
它引用0
数组中每个项目的 $cars 数组的位置。$_POST
这是我以前没有得到的。
它使用该isset
函数检查是否在表单中设置了每个后数组变量。然后它将每个设置为使用分配1
或将其保留为0
使用$cars[$_POST["cars"][$i]] = 1;
分配。
不过,似乎仍然缺少一件事,那就是isset
使用的功能。我假设它是0
或者null
如果1
一个复选框被选中。但这不能是数组的一部分,而是数组本身POST
的一个单独项目。POST
推荐阅读
- java - Andriod 应用程序在调用 Java.IO.FileDescriptor Open(String path, int baudrate, int flags) 时崩溃;
- java - 如何在 Android 中设计动态 UI 元素
- django-views - 创建自定义 django 用户更新不保存/创建
- css - MUI:将分页移动到 DataGrid 的顶部?
- numpy - 将 PIL 图像的 np.array 转换为二进制
- php - 在 WooCommerce 中以编程方式设置运输设置
- node.js - 如何在嵌套的对象数组中使用 Mongoose 填充数据?
- pandas - df.corr() 函数是否适用于时间序列列?
- airflow - 如何在气流中隐藏查询渲染(隐藏日志中的秘密)
- flutter - 无法在颤动中获得 percent_indicator 依赖项