Как отобразить динамические переменные сеанса в PHP? - PullRequest
0 голосов
/ 04 февраля 2010

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

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

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

  • $ _ SESSION [количество1] = 500
  • $ _ SESSION [language1] = Корейский
  • $ _ SESSION [количество2] = 250
  • $ _ SESSION [language2] = китайский

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

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

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

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

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

Как я могу отобразить и сгруппировать эти динамические переменные сеанса на странице оформления заказа?

Ответы [ 3 ]

4 голосов
/ 04 февраля 2010

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

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

Тогда ваша итерация на странице оформления заказа будет простой

3 голосов
/ 04 февраля 2010

Реструктурируйте ваш сеанс при сохранении в нем:

  • $ _ СЕССИЯ [заказ] [1] [количество] = 500
  • $ _ SESSION [заказ] [1] [язык] = корейский
  • $ _ СЕССИЯ [заказ] [2] [количество] = 250
  • $ _ SESSION [заказ] [2] [язык] = китайский

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

1 голос
/ 04 февраля 2010

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

$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, если вы хотите их в определенном порядке. Возможно, вам придется отсортировать подмассивы, чтобы расположить поля в определенном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...