【发布时间】:2016-11-03 18:13:01
【问题描述】:
在使用 foreach 循环内的开关将多个数组值分配给多个属性时,我遇到了一个奇怪的问题。基本上,我在此循环上方的方法将数组作为参数(工作正常),我用$array[$key] 分配开关参数,然后使用数组索引作为案例,例如$array[0]。这可以完美运行,直到它达到$array[4]。在案例与$array[4] 匹配后,它会将$array[5] 和$array[6] 分配给$array[4],我终生无法理解为什么。
输入数组(7x 参数):
$array = ['server1','192.168.0.1','SERVER1.test.com','This is server 01','1','1','1'];
Foreach 循环的输出($key,$value & echo 在每个案例之后):
Name = Key: 0 & Value: server1
IP = Key: 1 & Value: 192.168.0.1
Host = Key: 2 & Value: SERVER1.test.com
Summary = Key: 3 & Value: This is server 01
CAT = Key: 4 & Value: 1
CAT = Key: 5 & Value: 1
CAT = Key: 6 & Value: 1
如您所见,CAT 输出了 3x 但应该只显示一次,因为大小写与 Key 不匹配
类代码:
foreach ($array as $key=>$value) {
switch ($array[$key]) {
case $array[0]: $this->nodeName = $value; echo "Name = "; break;
case $array[1]: $this->nodeIP = $value; echo "IP = "; break;
case $array[2]: $this->nodeHostname = $value;echo "Host = "; break;
case $array[3]: $this->nodeSummary = $value; echo "Summary = "; break;
case $array[4]: $this->nodeCategory = $value; echo "CAT = "; break;
case $array[5]: $this->nodeSite = $value; echo "Site = "; break;
case $array[6]: $this->nodeCompany = $value; echo "Company = "; break;
case $array[7]: $this->nodePort = $value; break;
case $array[8]: $this->nodeTime = $value; break;
}
echo "Key: " . $key . " & Value: " . $value . "<br>"; //For Diag
}
编辑(自从接受答案)
DOH!
【问题讨论】:
标签: php arrays switch-statement