PHP访问数组值的正确方法是啥

Posted

技术标签:

【中文标题】PHP访问数组值的正确方法是啥【英文标题】:PHP What is the proper way to access the values of an arrayPHP访问数组值的正确方法是什么 【发布时间】:2014-08-16 08:29:01 【问题描述】:

这似乎是一个新手问题,但我在这里遇到了困难。

我有一个来自通过 jquery 发布的表单的 post 值数组,$_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=value&x_last_name=value&phone=xxx-xxx-xxxx&fax=&email=first.last%40domain.com&company=company&ccnumber=xxxxxxxxxxx&expMo=1&expYr=2016&cvv=&address1=address one&address2=&city=city&state=UT&zip=xxxxx&country=USA&addressee_firstName=&addressee_lastName=&shipping_address1=&shipping_address2=&shipping_city=&shipping_state=&shipping_zip=&shipping_country=&checkoutConfirm=1&x_amount=xx.xx&num_units=3&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'] 之类的值

【问题讨论】:

没有。 $_POST['extra'] 只是一个长字符串。尚未提取单个键 = 值对。您需要 parse_str() 那个字符串,它会将键/值对提取到它们自己的数组中。 感谢@MarcB 在这里进行了一些研究:[link]w3schools.com/php/func_string_parse_str.asp[/link] 我能够让它工作。我将我的解决方案发布为对原始问题的编辑 w3fools 不是“研究”。这只是谷歌的第一个结果。如果您必须查找有关 php 函数的信息,请转到 http://php.net/name_of_function 不管怎样,它都能给我正确的方法来使用你建议的功能。谢谢 +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

【讨论】:

谢谢@nikola 举个例子【参考方案2】:

看起来您的“额外”字段是一个 url 编码的查询字符串。您需要先解码该字符串,然后才能将内部属性作为数据(而不是字符串)访问:

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

现在您应该可以访问$extra['x_last_name']

【讨论】:

这似乎对我不起作用,但包括数组的可选参数以将其存储在工作中。即:parse_str($_POST['extra'],$extras) 无论如何谢谢你 是的,我的错,应该仔细阅读文档。更新的答案。

以上是关于PHP访问数组值的正确方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

检查输入字段中的空值的正确方法是啥[重复]

在PHP中访问多维OBJECT中的值的正确方法是什么

php返回数组中指定的一列方法是啥?

检查 url 类型值的正确方法是啥?

检查空值的正确方法是啥?

PHP - 使用 HTMLvalues 创建数组的正确方法