我正在编写一个简单的PHP页面,并使用了一些foreach
循环。
以下是脚本:
$arrs = array("a", "b", "c");
foreach ($arrs as $arr) {
if(substr($arr,0,1)=="b") {
echo "This is b";
}
} // End of first 'foreach' loop, and I didn't use 'ifelse' here.
当这个foreach
结束时,我写了另一个foreach
循环,其中foreach
循环中的所有值都与之前的foreach
相同。
foreach ($arrs as $arr) {
if(substr($arr,0,1)=="c") {
echo "This is c";
}
}
我不确定两个foreach
循环具有相同的值和键是否是一个好习惯。
值是否会在第一个foreach
循环中被覆盖?
答案 0 :(得分:6)
直到你开始使用引用然后你可以得到奇怪的行为,例如:
<?php
$array = array(1,2,3,4);
//notice reference &
foreach ($array as & $item) { }
$array2 = array(10, 11, 12, 13);
foreach ($array2 as $item) { }
print_r($array);
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 13
)
由于第一个foreach将$item
作为对$array[3]
的引用,$array[3]
会依次设置为$array2
中的每个值。
您可以在第一个unset($item)
之后解决此问题foreach
,这将删除引用,但这实际上不是您的问题,因为您没有使用foreach的引用。
答案 1 :(得分:6)
来自documentation of foreach
的两个值得注意的笔记:
注意:当
foreach
首次开始执行时,内部数组指针会自动重置到数组的第一个元素。这意味着您无需在reset()
循环之前调用foreach
。
和
注意:除非引用了数组,否则
foreach
在指定数组的副本上运行而不是数组本身。foreach
对数组指针有一些副作用。 在foreach
期间或之后不依赖数组指针而不重置。
答案 2 :(得分:1)
因为你没有写入数组,只读取它并打印出来,所以数组中的值都不会改变。
通过执行此操作,您可以节省两次循环数组的时间:
$arrs = array("a", "b", "c");
foreach ($arrs as $arr) {
if(substr($arr,0,1)=="b") {
echo "This is b";
}
if(substr($arr,0,1)=="c") {
echo "This is c";
}
}
答案 3 :(得分:1)
你只需要一个foreach循环。
对Jon所说的更简单的方法是:
$arrs = array("a", "b", "c");
foreach ($arrs as $arr)
if ($arr != "a")
echo 'This is ' . $arr;
这比使用substr更容易,更快,因为您已经在使用foreach循环。并尽量不要用大量的if语句污染它,如果你发现自己这样做,最好使用switch语句,速度要快得多。
干杯:)