尝试在 table 中显示数组内容时出现问题?

Problem trying to display array content in a table?

您好,我遇到了以下问题

这是我的网站现在的样子;

我想显示位于 JSON 文件中数组的 table 中的内容。 我想在 foreach 循环中执行此操作,它工作得很好。 直到我用 array_push 添加一个新的 因为那时我会遇到各种错误

它将为项目添加一个新的行和位置,但由于这些错误,它们不会被填充;

我确定我的 array_push 使用完全相同的密钥将内容添加到 json 文件中,但他们无法识别它。

我自己发现,当我向数组添加一些东西时,它会在它前面添加一个“0”、“1”、“2”等。 当我自己删除数字时,它会在 table 中工作,但它会自动继续将其添加到数组中;

"0":{"Aquaman":{"Naam":"Aquaman","Power1":"Water","Power2":"Vissen","Power3":"Zwemmen","Power4":"Onderwater ademen"}}

我怎样才能阻止它这样做? 或者针对此问题还有哪些其他修复方法?

PHP/HTML;

<?php
                                             
// ========== Read an array from a file ===================

// Open the file in 'read' modus
$file = fopen('myfile.json','r');                           

// Read the JSON array from the file
$aJSONArray = file_get_contents('myfile.json');  
           
// Convert to JSON array back to a PHP array
$arrDCSuperheroes = json_decode($aJSONArray,TRUE);

 // Close the file again            
fclose($file);                                              

// ========== Add a new value to the array ==============

if(!empty($_POST)) {
    $strSuperheldNaam = $_POST['strSuperheldNaam'];
    $arrDCSuperheroes2[$strSuperheldNaam] = array();
    $arrDCSuperheroes2[$strSuperheldNaam]['Naam'] = $_POST['strSuperheldNaam'];
    $arrDCSuperheroes2[$strSuperheldNaam]['Power1'] = $_POST['strPower1'];
    $arrDCSuperheroes2[$strSuperheldNaam]['Power2'] = $_POST['strPower2'];
    $arrDCSuperheroes2[$strSuperheldNaam]['Power3'] = $_POST['strPower3'];
    $arrDCSuperheroes2[$strSuperheldNaam]['Power4'] = $_POST['strPower4'];
    
    array_push($arrDCSuperheroes, $arrDCSuperheroes2);

    var_dump($arrDCSuperheroes);
}

// ========== Saving an array to a file =================

// Use JSON to encode the array into a storeable string
$aJSONArray = json_encode($arrDCSuperheroes);

// Open the file in 'write' modus
$file = fopen('myfile.json','w');    

// Save the content of the JSON array into the file
file_put_contents('myfile.json', $aJSONArray);              

// Close the file
fclose($file); 

echo("
    <html>

        <head>
            <title>Hello World!</title>
        </head>

        <body>

            <table border=1 width='90%'>
            <tr><th>Naam</th><th>Power 1</th><th>Power 2</th><th>Power 3</th><th>Power 4</th></tr>
        ");

                

                foreach($arrDCSuperheroes as $arrDCSuperheroesList) {
                    
                    echo("<tr><td>".$arrDCSuperheroesList['Naam']."</td><td>".$arrDCSuperheroesList['Power1']."</td><td>".$arrDCSuperheroesList['Power2']."</td><td>".$arrDCSuperheroesList['Power3']."</td><td>".$arrDCSuperheroesList['Power4']."</td></tr>");

                }   

     
            echo(" </table>

            <h3>Toevoegen aan array!</h3><hr>
                            
            <form method='post'>

                Naam: <input type='text' name='strSuperheldNaam'><br/>
                Power 1: <input type='text' name='strPower1'><br/>
                Power 2: <input type='text' name='strPower2'><br/>
                Power 3: <input type='text' name='strPower3'><br/>
                Power 4: <input type='text' name='strPower4'><br/><br/>
                                    
                <input type='submit' value='SUBMIT!'>

            </form>

        </body>

    </html>
");

?>

你不应该在关联数组上使用 array_push。 假设您希望 json 结构为:

{
  "heroName": {
    "property": "value"
   },
   ...
}

您只需按名称添加新英雄及其属性,如下所示。您还可以移动逻辑以在 if 语句中保存文件,以确保文件仅在更新时写入,而不是在每次加载页面时写入。


// ...

// Convert to JSON array back to a PHP array
$arrDCSuperheroes = json_decode($aJSONArray,TRUE);

if(!empty($_POST)) {
   $strSuperheldNaam = $_POST['strSuperheldNaam'];
   $arrDCSuperheroes[$strSuperheldNaam] = [
      'Naam' => $_POST['strSuperheldNaam'],
      'Power1' => $_POST['strPower1'],
      'Power2' => $_POST['strPower2'],
      'Power3' => $_POST['strPower3'],
      'Power4' => $_POST['strPower4'],
   ];


  // Use JSON to encode the array into a storeable string
  $aJSONArray = json_encode($arrDCSuperheroes);

  file_put_contents("myfile.json", $aJSONArray);
          
}

// ...