Heim  >  Fragen und Antworten  >  Hauptteil

Fügt einem bestimmten vorhandenen Array-Namen ein neues Objekt hinzu und speichert es unter Verwendung des Indexwerts

Ich weiß, dass der beste Weg wahrscheinlich darin besteht, das neue Objekt am Ende des vorhandenen Arrays ohne Namen zu speichern, aber ich möchte es etwas komplizierter machen, um zu lernen, wie man das macht und es auf dem Indexwert [0] hat. des Arrays anstelle des Endes [ arr.length - 1] und ich muss es unter einem bestimmten Array-Namen speichern, da ich in diesem Beispiel mehrere Arrays haben werde. Informationen werden durch HTML-Formulare gesammelt.

Was ich habe ist:

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

Das Ergebnis ist eine JSON-Datei wie diese:

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

Aber was ich erreichen möchte, ist Folgendes:

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

Ich habe verschiedene Methoden ausprobiert, aber diese Methoden löschen einfach alles und fügen nur die gesammelten Informationen hinzu, oder am Ende geht etwas kaputt. Ich hoffe, das hilft mir zu lernen, wie ich dieses Ziel erreichen kann!

P粉006847750P粉006847750179 Tage vor321

Antworte allen(2)Ich werde antworten

  • 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];

    Antwort
    0
  • P粉743288436

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

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

    array_unshift($array_data, $extra);

    Antwort
    0
  • StornierenAntwort