为什么分配顺序的这种变化会改变变量内容?

时间:2011-01-24 12:46:47

标签: php zend-server-ce

请解释一下:)

如果我跑

$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 ......我怎么能错过明显的事情:) ...

2 个答案:

答案 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];