2016-08-15 26 views
1

空のtdを空にして正常に動作するのはなぜですか?データがない場合、列の次の行データをプッシュします。それを修正する方法を教えてください。PHPテーブルエコー空白td

for($i = 0; $i < count($cheads[$keys[0]]); $i++){ 
    echo "<tr>"; 
    for($k = 0; $k < count($keys); $k++){ 
     echo "<td>"; 
     if(array_key_exists($i, $cheads[$keys[$k]])){ 
      echo $cheads[$keys[$k]][$i]['Data']; 
     }else{ 
      echo "N/A"; 
     } 
     echo "</td>"; 
    } 
    echo "</tr>"; 
} 

enter image description here

データが設定: enter image description here

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] => [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] => [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] => [User] => 5)) [Fruit Type] => Array ([0] => Array ([Field] => Fruit Type [Data] => Peanuts [User] => 5) [1] => Array ([Field] => Fruit Type [Data] => Apple [User] => 5))) 
+1

最初のループとエコーでは 'count($ cheads [$ keys [0]])'を使いますが、2番目のforループでは 'count($ keys)'を使います。あれは正しいですか? – Andreas

+0

カウントが正しく使用されている場合、-1で何らかのデータがある最後の列または最後の行が表示されなくなります – Waleed

+0

データセットが添付されています – Waleed

答えて

0

トリックは私の配列内のデータを得ていた方法を変更しました。私は関連する配列を別のアプローチで使用しました。前

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] => [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] => [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] => [User] => 5)) 
[Fruit Type] => Array ( 
    [0] => Array ([Field] => Fruit Type [Data] => Peanuts [User] => 5) 
    [1] => Array ([Field] => Fruit Type [Data] => Apple [User] => 5))) 

後:

Matrix: Array ( 
[D2AA0FA4-4F91-4757-9D27-9F65E0390EF1] => Array ([Last Name] => 1 [Phone Name] => 1 [Address Name] => 1 [Description] => 1) 
[182EDD25-89CE-40F0-87AE-53D218CD0A1F] => Array ([Last Name] => 2 [Phone Name] => 2 [Address Name] => 2 [Description] => 2) 
[59EF4DA3-0D3B-4F37-A415-10DD414351A7] => Array ([Last Name] => 3 [Phone Name] => 3 [Address Name] => 3 [Description] => 3 [Fruit Type] => Apple) 
[1C7B67E2-9230-4215-B990-C366077DA6C3] => Array ([Last Name] => 5 [Phone Name] => 5 [Address Name] => 5 [Description] => 5)) 

Iは、ユーザが各データを識別するための余分な識別子フィールドを有していました。私は彼らに親のキーを作って、それぞれの識別子のために、私はそれらの下のすべてのフィールドのデータをフィールドタイプのキーを各子データのために加えました。この前

私は別の配列内のすべてのキーを収集していた、私はそれを反復して、単純に次のようにエコー:

foreach ($matrix as $key => $value) { 

    echo "<tr>"; 

    for($i = 0; $i < count($cheads); $i++){ 

     $head = $cheads[$i]; 

     if(isset($value[$head])){ 
      echo "<td>"; 
      echo $value[$head]; 
      echo "</td>"; 
     }else{ 
      echo "<td>"; 
      echo "NA"; 
      echo "</td>"; 
     } 

    } 
    echo "<td><a href='?action=edit&guid=$key'>Edit</a></td>"; 
    echo "<tr>"; 

} 

結果:連想キーと異なるを使用して

enter image description here

アプローチは私のためにそれをしました。

ありがとうございました。

0

をあなたの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>