发送文本数据的HTTP POST数组时,例如来自带有HTML表单和文本字段的网页,如果我们使用字段的name属性,则以下数组为url_alias[id]
,其中id为正数整数,我们用PHP收到:
[url_alias] => Array
(
[2644] => url-of-product-ref-123
[1] => url-of-product-ref-224
)
服务器(例如Apache Linux)如何处理POST数据?它会在内部准备一个包含2645个索引的数组,除了索引之外还有一个指向所有索引的空指针:1和索引:2644,还是以其他优化方式执行?上面的格式在效率方面是否正确 - 它对于PHP编程非常舒适,但我担心内存泄漏或其他什么。
答案 0 :(得分:3)
来自PHP manual:
PHP中的数组实际上是一个有序的映射。映射是将值与键关联的类型。此类型针对多种不同用途进行了优化;它可以被视为数组,列表(向量),哈希表(地图的实现),字典,集合,堆栈,队列,甚至更多。由于数组值可以是其他数组,因此树和多维数组也是可能的。
在您的示例中,它只包含两个键,每个键都分配了一个值。
本手册介绍了PHP中的数组如何表现。例如,如果您设置以下数组:
$array = array(
"a",
"b",
6 => "c",
"d",
);
分配的密钥为0
,1
,6
和7
:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
请阅读手册以了解更多信息。
<强>更新强>
您还在询问如何通过HTTP发送数组。他们(数组)不是。根据W3C规范定义的here:
然后根据FORM元素的
enctype
属性指定的内容类型对表单数据集进行编码。
每个enctype
都有自己的规则,这些规则太长且无法在此处列出。如果你愿意,可以在那里阅读。问题是,当PHP接收到编码数据时,它会自动解码索引形式的变量名称。
因此,为了将其包装起来,表单数据被编码,发送到PHP并且解码过程在PHP端。