array_unshift,强制第二个值

时间:2014-05-06 12:23:26

标签: php json

我试图在.json中为交互式书籍构建一个内容表。我的输出必须从:

开始
{
  "url": "index.html",
  "hidden": true
},

但之后我想添加数组。 array_unshift在之前添加了一个元素,我希望脚本在之后添加新的数组。换句话说, index.html 应该保持在最顶层,并由我用脚本生成的数组继承。我该怎么做?

post.php中

<?php
// check if a form was submitted
if( !empty( $_POST ) ){

    $file = 'entries.json';

    $json = file_get_contents($file);

    // convert json back to a php stdClass
    $phpClass = json_decode($json);

    $postArray = array(
         "url" => $_POST['url'],
         "title" => $_POST['title'],
         "thumb" => $_POST['thumb'],
         "byline" => $_POST['byline']
    );

     // push the new $postArray onto the top of phpClass
     array_unshift($phpClass->contents, $postArray);

     // encode php class into json again
     $new_json = json_encode($phpClass);

     // write it out
     file_put_contents( $file, $new_json);
}

2 个答案:

答案 0 :(得分:0)

看一个小例子:

//example array
$array = array('a', 'b');

//position, where we want to paste new value
$offset = 2;

$result = array_slice($array, 0, $offset - 1, true) +
    array("my_key" => "my_value") +
    array_slice($array, $offset - 1, count($array)- $offset + 1, true);

现在,如果我们在var_dump()上致电$result,我们会得到:

array
  0 => string 'a' (length=1)
  'my_key' => string 'my_value' (length=8)
  1 => string 'b' (length=1)

而不是示例中的array("my_key" => "my_value")您可以使用自己的数组。它将永远是结果中的第二个。

答案 1 :(得分:0)

未经过测试

$file = 'entries.json';

$json = file_get_contents($file);

// convert json back to a php stdClass
$phpClass = json_decode($json);

// cut the header off
$header=array_shift($phpClass);

$postArray = array(
     "url" => $_POST['url'],
     "title" => $_POST['title'],
     "thumb" => $_POST['thumb'],
     "byline" => $_POST['byline']
);

 // push the new $postArray onto the top of phpClass
 array_unshift($phpClass->contents, $postArray);

 // paste the header back on.
 array_unshift($phpClass->contents, $header);

 // encode php class into json again
 $new_json = json_encode($phpClass);

 // write it out
 file_put_contents( $file, $new_json);

}