我知道最好的方法可能是將新物件保存在沒有名稱的現有數組的末尾,但我想稍微複雜一些來學習如何做到這一點,並在數組的索引值[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粉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];
P粉7432884362024-04-04 14:10:24
你可以使用array_unshift
來實作這個功能。它將所有數組元素向後移動一位,並在函數呼叫的第一個參數的索引0
處插入第二個參數。
array_unshift($array_data, $extra);