PHP Каков правильный способ доступа к значениям массива

#php #jquery #arrays #post

#php #jquery #массивы #Публикация

Вопрос:

Это похоже на вопрос новичка, но мне здесь трудно.

У меня есть массив значений post из формы, размещенной через jquery, массив $ _POST [«extra»] форматируется с помощью .serialize() .

 string(1) "0"
["tax"]=>string(1) "0"
["taxRate"]=>string(1) "0"
["itemCount"]=>string(1) "3"
["item_name_1"]=>string(17) "Detox Diet 1234®"
["item_quantity_1"]=>string(1) "2"
["item_price_1"]=>string(5) "32.95"
["item_options_1"]=>string(56) "thumb: /cb2014-II/img/products/DetoxDiet1234.jpg, pid: 3"
["item_name_2"]=>string(12) "Fiber 1234®"
["item_quantity_2"]=>string(1) "1"
["item_price_2"]=>string(2) "55"
["item_options_2"]=>string(52) "thumb: /cb2014-II/img/products/Fiber1234.jpg, pid: 4"
["item_name_3"]=>string(10) "eAc 1234®"
["item_quantity_3"]=>string(1) "2"
["item_price_3"]=>string(5) "42.95"
["item_options_3"]=>string(40) "pid: 27, thumb: img/products/eAC1234.jpg"
["extra"]=>string(465) "x_first_name=valueamp;x_last_name=valueamp;phone=xxx-xxx-xxxxamp;fax=amp;email=first.last@domain.comamp;company=companyamp;ccnumber=xxxxxxxxxxxamp;expMo=1amp;expYr=2016amp;cvv=amp;address1=address oneamp;address2=amp;city=cityamp;state=UTamp;zip=xxxxxamp;country=USAamp;addressee_firstName=amp;addressee_lastName=amp;shipping_address1=amp;shipping_address2=amp;shipping_city=amp;shipping_state=amp;shipping_zip=amp;shipping_country=amp;checkoutConfirm=1amp;x_amount=xx.xxamp;num_units=3amp;x_test_request=yes"
["testItem"]=>string(9) "test Item"
["check_out"]=>string(3) "Yes"
}
  

Для доступа к размещенным значениям внутри «extra» правильный синтаксис $newVar = $_POST['extra']['num_units'] ?

Поскольку кажется, что значения, выводимые на мой экран, являются первым символом первого «дополнительного» имени поля, я не использую цикл для извлечения значений, просто пытаясь установить локально после очистки.

МОЕ РЕШЕНИЕ: parse_str($extra,$extraFields); нет, я не могу получить доступ к значениям, таким как $extraFields['x_first_name']

Комментарии:

1. нет. $_POST['extra'] это просто длинная строка. отдельные пары ключ = значение НЕ были извлечены. Вам понадобится parse_str() эта строка, которая будет извлекать пары ключ / значение в их собственный массив.

2. Спасибо @MarcB за небольшое исследование здесь: [ссылка] w3schools.com/php/func_string_parse_str.asp [/link] Я смог заставить это работать. Я опубликовал свое решение как редактирование исходного вопроса

3. w3fools — это не «исследование». это только первый результат в Google. Если вам нужно найти информацию о функции php, просто перейдите к http://php.net/name_of_function

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

5. 1 за информацию

Ответ №1:

Смотрите это http://www.php.net//manual/en/function.parse-str.php

 $extras = array();
parse_str($_POST['extra'], $extras);
//now $extras holds all the info in a readable format
  

Комментарии:

1. Спасибо @nikola за пример

Ответ №2:

Похоже, что ваше «дополнительное» поле представляет собой строку запроса в кодировке url. Вам нужно будет декодировать эту строку, прежде чем вы сможете получить доступ к внутренним свойствам как к данным (а не к строке):

 parse_str(urldecode($_POST['extra']), $extras);
  

Теперь вы должны иметь доступ $extra['x_last_name']

Комментарии:

1. похоже, это не сработало для меня, но включение необязательного параметра для массива для его хранения сработало. ie: parse_str($_POST['extra'],$extras) спасибо вам любым способом

2. да, мой плохой, должен был прочитать документацию поближе. обновленный ответ.