2014-04-27 8 views
0

질문이상한 행동

"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++;" 줄을 주석 경우 내가 기대했던 것보다 더 많은 루프를 얻을. "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 개의 요소가 포함 된 최종 결과를 얻고 싶습니다. 디버깅 비트를 제거하고 싶지만 최종 결과를 유지하려면이 코드를 어떻게 변경해야하는지 이해해야합니다.

미리 감사드립니다.

+0

'$ foo' 란 무엇입니까? –

+1

'foreach ($ inner_arr as $ value) $ l ++; {...}'이것은 거의 틀림없이 오타입니다. 아마도 foreach ($ inner_arr를 $ value) {$ l ++; ...}' –

답변

1

코드를 조금 수정했습니다.시도 -

$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); 


OUTPUT

Array 
(
    [0] => 68 
    [1] => 72 
    [2] => 65 
    [3] => 62 
) 


DEMO 빠른 피드백을위한

http://3v4l.org/RJu69#v430

+0

"질문"과 _probably_와 같은 기존 코드의 문제에 대해서는 설명하지 않습니다.이 경우에는 OP에 더 유용합니다. – AD7six

+0

예 알아요. OP의 코드가 너무 많은 것은 유용하지 않다. 왜냐하면 하나의 간단한 for 루프에서 수행 될 수 있기 때문이다. –

1

foreach 헤더와 여는 중괄호 사이의 코드를 제거하십시오. 실수 한 적이 무엇

은 당신이 원하는 것은 당신은 l++ 넣어 가지고이

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) 
} 
1

처럼 보이는 foreach 루프 인 경우 실제로

foreach($inner_arr as $value) 
    $l++; 

처럼 작동하는 foreach 루프를 만드는 것입니다 두 번째 foreach과 이에 해당하는 {} 사이 따라서 코드를 {} 사이에 넣는 대신, l++ 만 알려야합니다. l++을 두 번째 앞에 넣으십시오. foreach 또는 해당안에 넣으십시오.

0

감사합니다. 정말 감사!!!

답변을 통해 내면의 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); 

다시 ... 모든 피드백에 대한 감사를 다음과 같이

나는 코드를 수정했습니다. 이 커뮤니티는 믿을 수 없습니다!