將新物件新增至特定現有數組名稱內,並使用索引值進行儲存
P粉006847750
P粉006847750 2024-04-03 19:43:33
0
2
320

我知道最好的方法可能是將新物件保存在沒有名稱的現有數組的末尾,但我想稍微複雜一些來學習如何做到這一點,並在數組的索引值[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學習者快速成長!