Цикл по многомерному массиву для предварительного заполнения динамически генерируемой формы - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь создать сайт электронной коммерции.У меня есть продукты, которые имеют разные атрибуты (например, цвет), и у каждого из них должен быть свой номер модели, цена и т. Д.

Я создал форму для сбора и сохранения этой информации.Однако я хочу сохранить эту информацию как переменную $_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 из другой информациив других местах.Тем не менее, любая помощь или совет с этим будет принята с благодарностью.

/ ---------- РЕДАКТИРОВАТЬ ---------- \

Основыто, как форма генерируется внутри другого цикла, выглядит следующим образом:

$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
        }
    }
}
...