首页  >  问答  >  正文

将新对象添加到特定现有数组名称内,并使用索引值进行保存

我知道最好的方法可能是将新对象保存在没有名称的现有数组的末尾,但我想稍微复杂一些来学习如何做到这一点,并在数组的索引值[0]而不是末尾[arr.length - 1]处添加新对象,而且我需要将其保存在特定的数组名称中,因为在此示例中我将有多个数组。信息是由HTML表单收集的。

我所拥有的是:

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

结果是一个像这样的JSON文件:

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

但我想要实现的是这样的:

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

我尝试了不同的方法,但那些方法只会清除所有内容并只添加收集到的信息,或者最终破坏事物。希望能帮助我学习如何实现这个目标!

P粉006847750P粉006847750179 天前323

全部回复(2)我来回复

  • P粉466909449

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

    要将元素添加到数组的开头,如果使用的是 PHP > 7.4,则可以使用 , ...$array_name 进行追加。

    类似于以下代码:

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

    回复
    0
  • P粉743288436

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

    你可以使用array_unshift来实现这个功能。它将所有数组元素向后移动一位,并在函数调用的第一个参数的索引0处插入第二个参数。

    array_unshift($array_data, $extra);

    回复
    0
  • 取消回复