如何解决PHP foreach循环示例混乱
| PHP中“ 0”循环的示例之一是foreach ($row as $key => $value) {
// somecode
}
我无法理解ѭ2的功能。任何人都可以通过PHP对其“看到”或评估的方式来帮助我吗?
操作的顺序是什么,$key
分配了什么值?
是什么让它不同于:
foreach ($row as $value) {
// somecode
}
?
我逻辑上认为,将$value
的值分配给$key
,然后将其分配为$row
的行,但这显然是不正确的...
解决方法
我知道它有些棘手,刚开始使用它时就很难理解。您使用的次数越多,它就越有意义。
您的数组如下所示:
// \"key\" \"value\"
// | |
// V V
$row[\'1\'] = \'item1\';
$row[\'2\'] = \'item2\';
$row[\'3\'] = \'item3\';
$row[\'4\'] = \'item4\';
键可以是任何东西,它们不必是数字。这样,您可以遍历数组中的所有项目而无需知道键!
因此,您的第一个示例可以解释如下:
// +--- The ARRAY where all of your data is
// |
// | +----- The KEY to access that element of the array
// | |
// | | +----- The VALUE of that element
// | | |
// V V V
foreach ($row as $key => $value){
if($row[$key] == $value){ // this statement is always true
echo \"true AGAIN!\"; // and thus will always print this line
}
}
据我所知,=>
并不是真正的种类的操作数,它仅用于完成foreach
循环的结构。
,PHP数组存储为键和值对:
$arr = array(
\'key1\' => \'value1\',\'key2\' => \'value2\'
);
标准foreach
语法仅获取值:
foreach ($arr as $value) {
// value1,value2
}
备用语法还允许您获取密钥:
foreach ($arr as $key => $value) {
// $key is \"key1\",then \"key2\"
// $value is \"value1\" then \"value2\"
}
参见手册中的“ 0”。
,这两个示例相同,但是第一个示例添加了您当前正在查看的键的定义,并将其命名为$ key。
比较array()
的定义,例如array(\'key\' => \'value\')
如果使用第一种方法,则$ key包含\'key \',而在第二个示例中则不包含。
,foreach ($row as $key => $value) { ..somecode..}
上面的代码用于关联数组,例如:
array(\"a\" => 1,\"b\" => 2,\"c\" => 3);
在上述情况下,为$ key变量分配了第一个值[第一次迭代时为a,第二个迭代为b,最后一个循环为c](称为键),为$ value变量分配了第二个值[1第一次迭代2,第二次迭代,最后3次迭代(称为值)。
如果省略了键分配,则仍将为$ value分配第二个值。
,带键和值的“ 0”操作码:
BCDF9C 0005: FE_RESET (CV 0 ($array),u) -> VAR 2
BCE014 0005: FE_FETCH (VAR 2,u) -> VAR 3
BCE08C 0005: OP_DATA (u VAR 0 &(0+2208F38),u VAR 0 &(0+2208F38)) -> TMP_VAR 5 &(C8+2208F39)
BCE104 0005: ASSIGN (CV 2 ($value),VAR 3) -> VAR 4
BCE17C 0005: ASSIGN (CV 1 ($key),TMP_VAR 5) -> VAR 6
BCE1F4 0005: JMP (u &(BCDFA0+4))
BCE26C 0005: SWITCH_FREE (VAR 2)
foreach
的操作码只有一个值:
BCE2E4 0007: FE_RESET (CV 0 ($array),u) -> VAR 7
BCE35C 0007: FE_FETCH (VAR 7,u) -> VAR 8
BCE3D4 0007: OP_DATA (u VAR 0 &(0+2208F38),u VAR 0 &(0+2208F38)) -> u VAR 0 &(0+2208F38)
BCE44C 0007: ASSIGN (CV 2 ($value),VAR 8) -> VAR 9
BCE4C4 0007: JMP (u &(BCE2E8+B))
BCE53C 0007: SWITCH_FREE (VAR 7)
对不起,奇怪的操作码表示形式。
基本上,没有键的版本每次迭代分配的变量要少两个。它不分配键和临时变量,而只是直接分配var。
,从PHP文档:
对于数组,将值分配给
命名键是使用\“ => \”执行的
操作员。这个的优先
运算符与其他相同
赋值运算符。
这个问题也让我好奇PHP中的=>
运算符。
如您所见,文档没有明确为其命名。这使我在IRC上侦查PHP通道。普遍的共识是,它被称为火箭操作员。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。