Adds a new object to a specific existing array name and saves it using the index value
P粉006847750
P粉006847750 2024-04-03 19:43:33
0
2
312

I know the best way is probably to save the new object at the end of the existing array without a name, but I want to make it a little more complicated to learn how to do this and have it at index value [0] of the array instead A new object is added at the end [arr.length - 1] and I need to save it in a specific array name because in this example I will have multiple arrays. Information is collected by HTML forms.

What I have is:

<?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';             
    }
}
    
?>

The result is a JSON file like this:

[
    {
        "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"
    }
]

But what I want to achieve is this:

{
    "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"}
    ]
}

I've tried different methods, but those either clear everything and only add the collected information, or end up breaking things. Hope this helps me learn how to achieve this goal!

P粉006847750
P粉006847750

reply all(2)
P粉466909449

To add an element to the beginning of an array, if you are using PHP > 7.4, you can append using , ...$array_name.

Similar to the following code:

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

You can use array_unshift to achieve this function. It shifts all array elements backward one and inserts the second parameter at index 0 of the first parameter of the function call.

array_unshift($array_data, $extra);
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!