问题
为什么"l++;"
的行会影响foreach循环的循环计数?这条线只是一个计数器,但不知何故,它正在影响最终结果。
有人能帮忙解释一下这里发生了什么吗?
代码
我有以下多维数组:
$team_array = array(
array(68, 6, 0, 10, "1.000"),
array(72, 6, 0, 10, "1.000"),
array(65, 6, 0, 8, "1.000"),
array(62, 6, 0, 4, "1.000"),
array(54, 3, 3, 3, ".500"),
array(55, 3, 3, -5, ".500"),
array(59, 0, 6, -16, ".000")
);
我正在使用以下代码对数组进行循环。
$foo = "1.000";
$k = 0;
$l = 0;
$m = 0;
$n = 0;
foreach($team_array as $index => $inner_arr)
{
foreach($inner_arr as $value)
//echo $value.", ";
//echo "<br/>";
$l++;
{
$m++;
echo "index - $index<br>";
echo "perc = ".$team_array[$index][4]."<br>";
if ($team_array[$index][4] == $foo)
{
$tie_tm[] = $team_array[$index][0];
$n++;
}
}
$k++;
}
echo "k - $k<br>";
echo "l - $l<br>";
echo "m - $m<br>";
echo "n - $n<br>";
echo "<pre>";
print_r($tie_tm);
我留下了调试部分,因为它们向我展示了奇怪的行为。具体来说,如果我注释掉"l++;"
行,我会得到比预期更多的LOTS循环。在没有"l++;"
行的情况下运行此代码会给我以下信息:
k - 7
l - 0
m - 35
n - 20
Array
(
[0] => 68
[1] => 68
[2] => 68
[3] => 68
[4] => 68
[5] => 72
[6] => 72
[7] => 72
[8] => 72
[9] => 72
[10] => 65
[11] => 65
[12] => 65
[13] => 65
[14] => 65
[15] => 62
[16] => 62
[17] => 62
[18] => 62
[19] => 62
)
把它留在里面,我得到:
k - 7
l - 35
m - 7
n - 4
Array
(
[0] => 68
[1] => 72
[2] => 65
[3] => 62
)
这是我想要和期待的结果。
最后,我需要的正是数组中有4个元素的最终结果。我想删除调试部分,但需要了解如何更改此代码以保持最终结果。
提前感谢!
稍微重新定义代码。尝试-
$team_array = array(
array(68, 6, 0, 10, "1.000"),
array(72, 6, 0, 10, "1.000"),
array(65, 6, 0, 8, "1.000"),
array(62, 6, 0, 4, "1.000"),
array(54, 3, 3, 3, ".500"),
array(55, 3, 3, -5, ".500"),
array(59, 0, 6, -16, ".000")
);
$result = array();
for($i=0; $i<4; $i++)
{
$result[] = $team_array[$i][0];
}
print_r($result);
输出
Array
(
[0] => 68
[1] => 72
[2] => 65
[3] => 62
)
演示
http://3v4l.org/RJu69#v430
删除foreach头和开头大括号之间的代码。
你无意中做的是创建一个foreach循环,它实际上像这个一样工作
foreach($inner_arr as $value)
$l++;
当你想要的是一个foreach循环,看起来像这个
foreach($inner arr as $value) {
// all your looping code should go in between the curly braces
// and the curly braces need to immediately follow the foreach header (with nothing in between)
}
您已将l++
置于第二个foreach
和相应的{}
之间。因此,您不是在{}
之间预处理代码,而是只预处理l++
。尝试将l++
放置在第二个foreach
之前或相应的{}
内部。
感谢您的快速反馈。我真的很感激!!!
这些答案帮助我意识到,foreach内部循环对我来说真的没有任何作用。我只对多维数组的单个指定维度感兴趣,并且在不使用foreach内部环路的情况下得到了我想要的结果。
我修改代码如下:
$foo = "1.000";
$m = 0;
$n = 0;
foreach($team_array as $index => $inner_arr)
{
$m++;
echo "index - $index<br>";
echo "perc = ".$team_array[$index][4]."<br>";
if ($team_array[$index][4] == $foo)
{
$tie_tm[] = $team_array[$index][0];
$n++;
}
}
echo "m - $m<br>";
echo "n - $n<br>";
echo "<pre>";
print_r($tie_tm);
再次。。。感谢所有的反馈。这个社区太棒了!