undefined offset
경고를받는 이유는 존재하지 않는 배열 키를 참조하기 때문입니다.
로직은 $matches
배열에 데이터를 저장하지 않습니다.
을 포함하도록 if
블록의 문을 업데이트해야합니다. 그러면 다음과 같이 보입니다.
if ($i < $size/4) {
$matches[$i] = array($i + 1, $i + $step, $i + (2 * $step), $i + (3 * $step));
} else if ($i >= ($size/4) && $i < ($size/2)) {
$matches[$i] = array($i + 1, $i + $step, $i + (2 * $step));
} else {
$matches[$i] = array($i + 1, $i + $step);
}
이제 $matches
이 채워집니다. 그러나 더 많은 문제가 발생하여 경고 메시지가 나타날 수 있습니다.
for
루프에서는 정적 횟수만큼 반복합니다. 그러나 $matches
배열의 크기가 다른 요소 수를 가질 때 고려하지 않습니다.
0
에서 12
까지 반복하는 대신 정확하게 요소 수를 반복해야합니다. 그래서 0
sizeof($matches)
까지 :
for ($row = 0; $row < sizeof($matches); $row++)
동일은 당신의 내면의 for
루프 간다. $matches
의 각 행에 배열이 sizeof($matches[$row])
를 통해 다른 요소의 수, 루프 가질 수 있기 때문에 : 당신이 배열의 모든 요소를 반복하는 두 경우 모두 이후
for ($col = 0; $col < sizeof($matches[$row]); $col++)
을, 나는 그것이 겠 foreach
루프를 언급 해주십시오. 이 목적을 위해 존재합니다. 귀하의 코드는 foreach 문을 사용하여 비트를 단순화 할 수 있습니다
foreach ($matches as $row) {
echo "<tr>";
foreach ($row as $col) {
echo "<td>" . $col . "</td>";
}
echo "</tr>";
}
공지 사항 난 당신의 라인을 교체 :
echo "<tr> <td>". $matches[$row][$col]. "</td><td>". $matches[$row][$col] . "</td><td>". $matches[$row][$col] . "</td><td>". $matches[$row][$col];
여기에 2 문제가 있습니다 1) $matches[$row][$col]
여러 번 인쇄는 인쇄 것입니다 모든 열에서 정확히 동일한 값을 사용합니다. 이는 사용자가하려는 것이 아닙니다. 2) 반복 할 때마다 한 번에 한 열 (td) 만 인쇄하면됩니다.
그래서이 루프 밖에서 행 열기 및 닫기 태그를 이동하고 반복마다 열 데이터 만 인쇄해야합니다.그래서 코드는 다음과 같습니다
foreach ($matches as $row) {
echo "<tr>";
foreach ($row as $col) {
echo "<td>" . $col . "</td>";
}
echo "</tr>";
}
난 당신이 원하는 정확한 결과를 얻기 논리에 일부 조정을 할거야 느낌이 있지만, 지금 당신은 경고 및 방법에 대한 이유를 알고 그들을 막을 수 있습니다. foreach
을 사용하면 코드가 약간 정리됩니다. 자, 이것이 좋은 시작입니다 ..!
여기에 새로운 코드가 전부입니다 : 당신이 있기 때문에
function generateMatches($size)
{
$matches = array();
$step = 3;
if ($size % 4 == 0) {
for ($i = 0; $i < ($size - $step); $i++) {
if ($i < $size/4) {
$matches[$i] = array($i + 1, $i + $step, $i + (2 * $step), $i + (3 * $step));
} else if ($i >= ($size/4) && $i < ($size/2)) {
$matches[$i] = array($i + 1, $i + $step, $i + (2 * $step));
} else {
$matches[$i] = array($i + 1, $i + $step);
}
}
}
echo "<table><tr><td> Team # </td><td>Opponent 1</td><td>opponent 2</td><td>opponent 3</td></tr>";
foreach ($matches as $row) {
echo "<tr>";
foreach ($row as $col) {
echo "<td>" . $row[$col] . "</td>";
}
echo "</tr>";
}
}
전체 당신이 점점 오류가 무엇을 해결하기 위해 당신이 시도한를 기입하십시오, 당신은 정의되지 않은 오프셋 오류가 발생하고있는 이유는 배열에 존재하지 않는 키/값을 호출하려고합니다. 즉, 배열이 올바르게 채워 졌는지 확인해야합니다. – Epodax