NooBiToo
@NooBiToo

Как распарсить такой массив?

Получаю массив, так как все name разные записать в переменную
$name1 = $_POST['name1] не выход, так как количество может меняться.
и к каждому name идет свой quantity
Как можно это грамотно распарсить в переменные, что бы отправлять на почту допустим в виде таблички?
array(12) { ["telephone"]=> string(17) "+7(999) 999-99-99" ["name0"]=> string(27) "Имя 1" ["quantity0"]=> string(1) "1" ["name1"]=> string(30) "Имя 2" ["quantity1"]=> string(1) "2" ["name2"]=> string(28) "Имя 3" ["quantity2"]=> string(1) "3" ["name3"]=> string(17) "Имя 4" ["quantity3"]=> string(1) "1" ["name4"]=> string(20) "Имя 5" ["quantity4"]=> string(1) "1" ["totalCost"]=> string(4) "3380" }
  • Вопрос задан
  • 134 просмотра
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Тут надо вообще всё менять.
Корзину надо хранить в сессии, а не в посте.
Тогда ничего не придется парсить.
Из формы забираешь только телефон, а корзина уже в виде массива лежит в сессии
без всяких имен, а только айди товара и его количество.
название и стоимость берется из базы, на момент оформления заказа.

тотал кост считается на основании этой информации полученной из БД, а не передается с клиента. а то клиент тебе насчитает, ты ему еще должен останешься.
Ответ написан
@dzhebrak
Можно ключ массива разбить с помощью регулярного выражения, а дальше просто выбирать нужные значения. Пример:
$arr = [
    'telephone' => '+7(999) 999-99-99',

    'name0' => 'Имя 1',
    'quantity0' => '1',

    'name1' => 'Имя 2',
    'quantity1' => '2',

    'name20' => 'Имя 3',
    'quantity20' => '3',

    'totalCost' => '3380',
];

foreach ($arr as $k => $v) {
    if(preg_match("/^([a-zA-Z_]+)(\d+)$/", $k, $matches)) {
        $key = $matches[1];
        $idx = $matches[2];
    } else {
        $key = $k;
    }

    if($key === 'quantity') {
        continue;
    }

    if($key === 'name') {
        printf('Name: %s, Quantity: %s<br>', $v, $arr['quantity'.$idx]);
        continue;
    }
    
    printf('%s: %s<br>', $k, $v);
}

Но, если есть такая возможность, лучше передавать данные из формы следующим образом:
<form action="/test.php" method="POST">
  <input type="text" name="name[]" value="name 1">
  <input type="text" name="quantity[]" value="quantity 1">

  <input type="text" name="name[]" value="name 2">
  <input type="text" name="quantity[]" value="quantity 2">
  
  <input type="submit"  value="Submit">
</form>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы