をあなたのPHPと間違って何も実際にはありません。問題は、配列がどのように生成されたかに起因しています。
数字の配列キーインデックスに基づいて行を識別しているため、行が見つからない場合、数値インデックスをスキップする代わりに次の行を使用してすべてが同期しなくなります。
ダイアグラムに基づいて、すべての「Yo」レコードがまとめられていることを期待しているので、配列キーを同期させておく必要があります。これは
'Address Name' => Array (
'0' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'1' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'2' => Array ('Field' => 'Address Name', 'Data' => 'Yo', 'User' => 5),
'3' => Array ('Field' => 'Address Name', 'Data' => null, 'User' => 5)
),
と
'Fruit Type' => Array (
'0' => Array ('Field' => 'Fruit Type', 'Data' => 'Peanuts', 'User' => 5),
'1' => Array ('Field' => 'Fruit Type', 'Data' => 'Apple', 'User' => 5)
)
が
になるだろうとは、 '電話名' のインデックス2をスキップしても、 'フルーツタイプ'
内のインデックス0、1、および2をスキップ意味します
'Address Name' => Array (
'0' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'1' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'3' => Array ('Field' => 'Address Name', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Address Name', 'Data' => null, 'User' => 5)
),
'Fruit Type' => Array (
'3' => Array ('Field' => 'Fruit Type', 'Data' => 'Peanuts', 'User' => 5),
'4' => Array ('Field' => 'Fruit Type', 'Data' => 'Apple', 'User' => 5)
)
各レコードに他の識別情報がないため、それ以外の方法では解決できません(すべてのユーザーが5)が奇妙です。
代わりの解決策は、連想キーインデックスを使用するように変更することですが、数値キーに依存しているため、PHPの行の構築方法全体が崩れてしまいます。
あなたの問題を解決する可能性のあるもう1つの方法は、入力したデータに、ダイアグラムの行よりも多くの行が含まれていることに気付いたことです。この余分な行では、データが欠落するのではなく、実際には値がnull
として挿入されます。最初のレコードを消去すると、新しいデータが同じ方法で(NULLを挿入することによって)作成される限りスクリプトは機能します。ただし、「N/A」列は空白のセルとして表示されるため、決して入力されません。
あなたのスクリプトであるとして:
<?php
$cheads = Array (
'Last Name' => Array (
'0' => Array ('Field' => 'Last Name', 'Data' => 1, 'User' => 5),
'1' => Array ('Field' => 'Last Name', 'Data' => 1, 'User' => 5),
'2' => Array ('Field' => 'Last Name', 'Data' => 1, 'User' => 5),
'3' => Array ('Field' => 'Last Name', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Last Name', 'Data' => 'Test', 'User' => 5)
),
'Phone Name' => Array (
'0' => Array ('Field' => 'Phone Name', 'Data' => 2, 'User' => 5),
'1' => Array ('Field' => 'Phone Name', 'Data' => 2, 'User' => 5),
'2' => Array ('Field' => 'Phone Name', 'Data' => 2, 'User' => 5),
'3' => Array ('Field' => 'Phone Name', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Phone Name', 'Data' => null, 'User' => 5)
),
'Address Name' => Array (
'0' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'1' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'2' => Array ('Field' => 'Address Name', 'Data' => 'Yo', 'User' => 5),
'3' => Array ('Field' => 'Address Name', 'Data' => null, 'User' => 5)
),
'Description' => Array (
'0' => Array ('Field' => 'Description', 'Data' => 4, 'User' => 5),
'1' => Array ('Field' => 'Description', 'Data' => 4, 'User' => 5),
'2' => Array ('Field' => 'Description', 'Data' => 4, 'User' => 5),
'3' => Array ('Field' => 'Description', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Description', 'Data' => null, 'User' => 5)
),
'Fruit Type' => Array (
'0' => Array ('Field' => 'Fruit Type', 'Data' => 'Peanuts', 'User' => 5),
'1' => Array ('Field' => 'Fruit Type', 'Data' => 'Apple', 'User' => 5)
)
);
$keys = ['Last Name', 'Phone Name', 'Address Name', 'Description', 'Fruit Type'];
?>
<table border=1>
<thead>
<tr>
<?php
foreach ($keys as $key)
echo "<th>$key</th>";
?>
</tr>
</thead>
<tbody>
<?php
for($i = 0; $i < count($cheads[$keys[0]]); $i++){ // foreach 'Last Name'
echo "<tr>";
for($k = 0; $k < count($keys); $k++){ // foreach $keys
echo "<td>";
if(array_key_exists($i, $cheads[$keys[$k]])){
echo $cheads[$keys[$k]][$i]['Data'];
}else{
echo "N/A";
}
echo "</td>";
}
echo "</tr>\n";
}
?>
</tbody>
</table>
<table border=1>
<thead>
<tr>
<th>Last Name</th><th>Phone Name</th><th>Address Name</th><th>Description</th><th>Fruit Type</th> </tr>
</thead>
<tbody>
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>Peanuts</td></tr>
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>Apple</td></tr>
<tr><td>1</td><td>2</td><td>Yo</td><td>4</td><td>N/A</td></tr>
<tr><td>Yo</td><td>Yo</td><td></td><td>Yo</td><td>N/A</td></tr>
<tr><td>Test</td><td></td><td>N/A</td><td></td><td>N/A</td></tr>
</tbody>
</table>
同期の数字キーで構成アレイを使用します。
$cheads = Array (
'Last Name' => Array (
'0' => Array ('Field' => 'Last Name', 'Data' => 1, 'User' => 5),
'1' => Array ('Field' => 'Last Name', 'Data' => 1, 'User' => 5),
'2' => Array ('Field' => 'Last Name', 'Data' => 1, 'User' => 5),
'3' => Array ('Field' => 'Last Name', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Last Name', 'Data' => 'Test', 'User' => 5)
),
'Phone Name' => Array (
'0' => Array ('Field' => 'Phone Name', 'Data' => 2, 'User' => 5),
'1' => Array ('Field' => 'Phone Name', 'Data' => 2, 'User' => 5),
'2' => Array ('Field' => 'Phone Name', 'Data' => 2, 'User' => 5),
'3' => Array ('Field' => 'Phone Name', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Phone Name', 'Data' => null, 'User' => 5)
),
'Address Name' => Array (
'0' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'1' => Array ('Field' => 'Address Name', 'Data' => 3, 'User' => 5),
'3' => Array ('Field' => 'Address Name', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Address Name', 'Data' => null, 'User' => 5)
),
'Description' => Array (
'0' => Array ('Field' => 'Description', 'Data' => 4, 'User' => 5),
'1' => Array ('Field' => 'Description', 'Data' => 4, 'User' => 5),
'2' => Array ('Field' => 'Description', 'Data' => 4, 'User' => 5),
'3' => Array ('Field' => 'Description', 'Data' => 'Yo', 'User' => 5),
'4' => Array ('Field' => 'Description', 'Data' => null, 'User' => 5)
),
'Fruit Type' => Array (
'3' => Array ('Field' => 'Fruit Type', 'Data' => 'Peanuts', 'User' => 5),
'4' => Array ('Field' => 'Fruit Type', 'Data' => 'Apple', 'User' => 5)
)
);
<table border=1>
<thead>
<tr>
<th>Last Name</th><th>Phone Name</th><th>Address Name</th><th>Description</th><th>Fruit Type</th> </tr>
</thead>
<tbody>
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>N/A</td></tr>
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>N/A</td></tr>
<tr><td>1</td><td>2</td><td>N/A</td><td>4</td><td>N/A</td></tr>
<tr><td>Yo</td><td>Yo</td><td>Yo</td><td>Yo</td><td>Peanuts</td></tr>
<tr><td>Test</td><td></td><td></td><td></td><td>Apple</td></tr>
</tbody>
</table>
最初のループとエコーでは 'count($ cheads [$ keys [0]])'を使いますが、2番目のforループでは 'count($ keys)'を使います。あれは正しいですか? – Andreas
カウントが正しく使用されている場合、-1で何らかのデータがある最後の列または最後の行が表示されなくなります – Waleed
データセットが添付されています – Waleed