将新对象添加到特定现有数组名称内,并使用索引值进行保存
P粉006847750
P粉006847750 2024-04-03 19:43:33
0
2
365

我知道最好的方法可能是将新对象保存在没有名称的现有数组的末尾,但我想稍微复杂一些来学习如何做到这一点,并在数组的索引值[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粉006847750
P粉006847750

全部回复(2)
P粉466909449

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

类似于以下代码:

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

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

array_unshift($array_data, $extra);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!