请解释一下:)
如果我跑
$custId = getExternalId();
echo $custId . "\n"; // Prints foobar_16262499_1
$serial = '';
$custId = explode('_', $custId);
var_dump($custId);
$custId = $custId[1];
$serial = $custId[2];
die("custId: $custId serial: $serial\n");
我得到了
custId: 16262499 serial: 2
这不正确。序列应为1.但如果我将赋值顺序更改为
$custId = getExternalId();
echo $custId . "\n"; // Prints foobar_16262499_1
$serial = '';
$custId = explode('_', $custId);
var_dump($custId);
$serial = $custId[2]; // Change order here!!!
$custId = $custId[1];
die("custId: $custId serial: $serial\n");
它有效并且给了我
custId: 16262499 serial: 1
为什么?
在这两种情况下,数组的var_dump都会产生相同的输出:
array(3) {
[0]=>
string(4) "foobar"
[1]=>
string(8) "16262499"
[2]=>
string(1) "1"
}
我正在运行PHP / 5.3.3 ZendServer
SMACKS HEAD ......我怎么能错过明显的事情:) ...
答案 0 :(得分:2)
你覆盖
$custId
当你写这一行
$custId = $custId[1];
所以在那之后你得到了一些你不期望的东西
$serial = $custId[2];
所以这样做
list($custId,$serial) = array($custId[1],$custId[2]);
答案 1 :(得分:0)
1. $custId = $custId[1];
2. $serial = $custId[2]; // **
**这真的意味着,($ custId [1])[2]原始的getExternalId();
因为第1行之后的变量$ custId不再是
的结果$custId = getExternalId();
而只是第二个元素(index [1])。
您可以通过再转储一次来添加到调试中
$custId = explode('_', $custId);
var_dump($custId);
$custId = $custId[1];
var_dump($custId);
$serial = $custId[2];