2010-02-04 4 views
0

Страница заказа: На этой странице клиенты могут выбрать, чтобы добавить заказы на визитные карточки с различными иностранными языками и другими опциями.Как изменить динамические переменные сеанса в PHP?

Когда пользователь нажимает кнопку, чтобы добавить дополнительную карту, javaScript добавляет ряд полей формы, и для того, чтобы дать им уникальные атрибуты имени, я просто добавляю переменную счетчика в конце имени для каждой группы полей, поэтому я могу сохранить их как уникальную группу переменных сеанса, где каждое поле формы имеет разные имена, но тот же номер счетчика в конце, поэтому я знаю, что они принадлежат друг другу.

Эти переменные сессии Я экономии, когда пользователь отправляет форму , чтобы перейти к следующей странице:

  • $ _SESSION [Quantity1] = 500
  • $ _SESSION [language1] = корейский
  • $ _SESSION [quantity2] = 250
  • $ _SESSION [language2] = китайский

Оформить заказ Страница: На этой странице, я хочу, чтобы она отображала информацию для каждой отдельной карты.

Я пытаюсь отобразить все переменные сеанса с тем же номером в конце переменной сеанса на странице проверки. До сих пор я использую цикл foreach, чтобы отобразить все переменные сеанса, но я пытаюсь только отбросить те, у которых есть «1» в конце имен, или «2» в конце имен , и т. д. и группировать их вместе.

Так в идеале, я хотел бы что-то вроде этого:

приказ № 1,
Количество: 500,
Язык карты: корейский

Заказать # 2,
Количество: 250 ,
Язык на карте: китайский

можно ли эхо и сгруппировать эти динамические переменные сеанса на странице проверки?

ответ

3

Restructure сеанс при сохранении в ней вместо:

  • $ _SESSION [Заказ] [1] [количество] = 500
  • $ _SESSION [Заказ] [1] [язык] = корейский
  • $ _SESSION [заказ] [2] [количество] = 250
  • $ _SESSION [заказ] [2] [язык] = китайский

Таким образом, вы можете использовать foreach() на order, чтобы получить все чисто.

+0

Мне нравится эта идея. Мне удалось сохранить сеансы так, как вы рекомендовали, но я не слишком уверен, как написать цикл foreach и что вы подразумеваете под «порядком». Я не могу найти эту функцию на php.net – zeckdude

+0

'foreach ($ _ SESSION ['order'] as $ order) {...}' –

+0

Я понял, что мне нужно поставить цикл foreach внутри этого цикла foreach. Спасибо! – zeckdude

1

Группировка полей относительно проста. Просто проведите через них все, вытащите номер в конце и группируйте их в другой массив.

$vars = array(); 
foreach ($_SESSION as $k => $v) { 
    if (preg_match('!\d+$!', $k, $matches)) { 
    $number = $matches[0]; 
    if (array_key_exists($number, $vars)) { 
     $vars[$number][$k] = $v; 
    } else { 
     $vars[$number] = array($k => $v); 
    } 
    } 
} 
print_r($vars); 

Чтобы отобразить их проходное $vars и делать то, что вам нужно сделать. Вам может понадобиться сортировать $vars, если вы хотите их в определенном порядке. Возможно, вам придется отсортировать субмассивы, чтобы поместить поля в определенном порядке.

4

Почему бы не сохранить сеанс таким образом?

$_SESSION[orders] => array(
    [0]=>array(
    'quantity'=>1, 
    'language'=>'Korean' 
    ), 
    [1]=>array(
    'quantity'=>2, 
    'language'=>'Chinese' 
    ), 
) 

Тогда ваша итерация на кассе странице будет просто

Смежные вопросы