Maison  >  Questions et réponses  >  le corps du texte

Ajoute un nouvel objet à un nom de tableau existant spécifique et l'enregistre en utilisant la valeur d'index

Je sais que le meilleur moyen est probablement de sauvegarder le nouvel objet à la fin du tableau existant sans nom, mais je veux rendre les choses un peu plus compliquées pour apprendre à faire cela et l'avoir à la valeur d'index [0] du tableau au lieu de la fin [ arr.length - 1] et je dois l'enregistrer sous un nom de tableau spécifique car j'aurai plusieurs tableaux dans cet exemple. Les informations sont collectées par des formulaires HTML.

Ce que j'ai c'est :

<?php
    
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                
    function get_data() {
        $file_name='newsFeeder'. '.json';

        if(file_exists("./feeder/{$file_name}")) {
            $current_data=file_get_contents("./feeder/{$file_name}");
            $array_data=json_decode($current_data, true);

            $extra=array(
                'year' => $_POST['year'],
                'link' => $_POST['link'],
                'img' => $_POST['img'],
            );

            $array_data[]=$extra;
            echo "file exist<br/>";
            return json_encode($array_data, JSON_PRETTY_PRINT);
        }
        else {
            $datae=array();
            $datae[]=array(
                'year' => $_POST['year'],
                'link' => $_POST['link'],
                'img' => $_POST['img'],
            );
            echo "file not exist<br/>";
            return json_encode($datae, JSON_PRETTY_PRINT);
        }
    }

    $file_name='newsFeeder'. '.json';
    
    if(file_put_contents("./feeder/{$file_name}", get_data())) {
        echo 'success';
    }               
    else {
        echo 'There is some error';             
    }
}
    
?>

Le résultat est un fichier JSON comme celui-ci :

[
    {
        "year": "2022",
        "link": "xxxxxx_01.html",
        "img": "xxxxxx_01.webp"
    },
    {
        "year": "2023",
        "link": "xxxxxx_02.html",
        "img": "xxxxxx_02.webp"
    },
        .
        .
        .
        .
    {      // <- 这是在索引值[arr.length - 1]处添加的最新对象 //
        "year": "2024",
        "link": "xxxxxx_03.html"
    }
]

Mais ce que je veux réaliser, c'est ceci :

{
    "newsFeeder": [   // <- 这是我需要添加新对象的数组 //
        {      // <- 这是在索引值[0]处添加的最新对象 //
            "year": "2024",
            "link": "xxxxxx_06.html",
            "img": "xxxxxx_06.webp"
        },
        .
        .
        .
        .
        {
            "year": "2023",
            "link": "xxxxxx_02.html",
            "img": "xxxxxx_02.webp"
        },
        {
            "year": "2022",
            "link": "xxxxxx_01.html",
            "img": "xxxxxx_01.webp"
        }
    ],

    "whyComplicate_things":[      // 我需要保持此数组不变 //
        {"a":"01.webp", "title":"title 01"},
        {"a":"02.webp", "title":"title 02"},
        {"a":"03.webp", "title":"title 03"}
    ]
}

J'ai essayé différentes méthodes, mais ces méthodes effacent tout et n'ajoutent que les informations collectées, ou finissent par casser des choses. J'espère que cela m'aidera à apprendre comment atteindre cet objectif !

P粉006847750P粉006847750179 Il y a quelques jours324

répondre à tous(2)je répondrai

  • P粉466909449

    P粉4669094492024-04-04 18:47:26

    Pour ajouter un élément au début d'un tableau, si vous utilisez PHP > 7.4, vous pouvez utiliser , ...$array_name pour l'ajouter.

    Similaire au code suivant :

    $array_name = [array(
        'year' => $_POST['year'],
        'link' => $_POST['link'],
        'img' => $_POST['img']
    ), ...$array_name];

    répondre
    0
  • P粉743288436

    P粉7432884362024-04-04 14:10:24

    Vous pouvez insérer le deuxième paramètre en utilisant array_unshift来实现这个功能。它将所有数组元素向后移动一位,并在函数调用的第一个参数的索引0.

    array_unshift($array_data, $extra);

    répondre
    0
  • Annulerrépondre