PHP foreach循环示例混乱

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?