首页 > 解决方案 > 使用 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].", ";
                }   
            }
        }
    }
}

标签: php

解决方案


这是我从最初的帖子中学到的东西。

$_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


推荐阅读