循环通过多维数组预先填充动态生成的表单

时间:2018-05-14 12:04:02

标签: php multidimensional-array nested-loops

我正在尝试创建一个电子商务网站。我的产品具有不同的属性(例如颜色),并且每个产品都需要有自己的型号和价格等。

我已生成一个表单来收集此信息并保存。但是,我希望能够在用户添加产品时将此信息保存为$_SESSION变量,以便他们可以返回到价格部分,并且表单将预填充他们之前输入的内容,即使他们还没有将产品保存到数据库中。

要做到这一点,我有一个字符串,我将其视为以$_SESSION格式存储为PHP变量的项目数组,格式如下:

'item-test,100,20,20,20,20,£,1,item-test,100,20,20,20,20,£,2'

我将其解析为一个我可以处理的实际数组(当它实际保存产品时,我的SQL查询在此foreach()循环内):

if(isset($_SESSION['price_array'])){
    $price_array = $_SESSION['price_array'];
    $result = explode("item-",$price_array);
        foreach($result as $item){
        if(isset($item) && $item!=""){
            $itemValue = explode(",",$item);

            $product_model_no = $itemValue[0];
            $product_value = $itemValue[1];
            $product_discount = $itemValue[2];
            $product_margin = $itemValue[3];
            $product_shipping_domestic = $itemValue[4];
            $product_shipping_other = $itemValue[5];
            $product_currency = $itemValue[6];
            $product_attribute = $itemValue[7];
        }
    }
}

因此,要生成此表单,我需要另一个遍历所有可能属性的循环(并非所有产品都可以采用所有颜色,因此仅存储在$_SESSION中的那些产品适用)。如果我尝试预先填充它,因为它是我上面的变量只有数组中最后一项的值。

但是,如果我将其嵌套在另一个循环中,它将获得正确的数据,但它将生成表单多次,具体取决于数组中有多少项,表单的每次迭代都具有该项的值在阵列中。

我知道尝试解释非常复杂,我无法提供所有代码,因为它非常复杂,大部分都是在PHP中从其他位置的其他信息生成的。但是,对此有任何帮助或建议将不胜感激。

/ ---------- ---------- EDIT \

在另一个循环中如何生成表单的基础知识如下:

$params = [$attribute];
$sql = "SELECT * FROM attributes WHERE id=?";
$attributeResult = DB::run($sql,$params);
foreach ($attributeResult as $value) {
    for ($i = 1; $i <= 15; $i++) {                  
        //generate form here
        if($i == $product_attribute){
            // pre-populate form here
        }
    }
}

0 个答案:

没有答案