undefined offset
警告が表示される理由は、存在しない配列キーを参照しているためです。
ロジックは、$matches
アレイにデータを保存することはありません。
if
ブロックのステートメントを$matches[$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);
}
ここで$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のを使用してビットを単純化することができます。
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]
を複数回印刷する印刷しようとしているが、私はあなたの行を置き換え
foreach ($matches as $row) {
echo "<tr>";
foreach ($row as $col) {
echo "<td>" . $col . "</td>";
}
echo "</tr>";
}
お知らせあなたがやろうとしているのではない、すべての列でまったく同じ値です。 2)ループするので、一度に1列(td)だけ印刷する必要があります。
このループの外側で行の開閉タグを移動し、繰り返しごとに1回のみ列データを印刷する必要があります。だから、コードは次のようになります。
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