我很难通过id
删除.json文件中的记录。
所以我原来的JSON看起来像这样:
[["{\"id\":1474753066818,\"name\":\"dd\",\"brand\":\"dd\",\"price\":\"12\"}"],["{\"id\":1474753069035,\"name\":\"dd3\",\"brand\":\"dd\",\"price\":\"12\"}"]]
这是我的php:
<?php
$string = file_get_contents("products.json");
//var_dump($string);
$input = json_decode($string, true);
$output = array();
//here starts the problem
foreach($input as $element) {
if($_GET['data'] != $element[0]["id"]){ //add in array if id doesn't match
$output[] = $element;
}
}
$final = json_encode($output);
$f = @fopen("products.json", "r+");
if ($f !== false) {
ftruncate($f, 0);
fclose($f);
}
file_put_contents("products.json", $final);
>
基本上我的问题始于foreach
,我正在迭代看起来像这样的东西:
array(2) { [0]=> array(1) { [0]=> string(58) "{"id":1474753066818,"name":"dd","brand":"dd","price":"12"}" } [1]=> array(1) { [0]=> string(59) "{"id":1474753069035,"name":"dd3","brand":"dd","price":"12"}" } }
显然在这里我无法访问id
,就像我在foreach中尝试做的那样,因为整个事情都是一个字符串。
我不知道如何将此字符串转换为数组,比较id,然后将其编码回我在本文开头所示的原始json格式。
请帮忙!
答案 0 :(得分:1)
你的products.json文件有点奇怪,见下文:
[
[
"{\"id\":1474753066818,\"name\":\"dd\",\"brand\":\"dd\",\"price\":\"12\"}"
],
[
"{\"id\":1474753069035,\"name\":\"dd3\",\"brand\":\"dd\",\"price\":\"12\"}"
]
]
您的products.json包含一个数组数组,其中包含1个元素,其值为json编码的字符串。您似乎必须再次对字符串内容调用json_decode
以获取您所追求的内容。
foreach($input as $element) {
$product = json_decode($element[0]);
if($_GET['data'] != $product["id"]){
//add in array if id doesn't match
$output[] = $product ;
}
}
注意代码的其余部分也很重要:
$final = json_encode($output);
$f = @fopen("products.json", "r+");
if ($f !== false) {
ftruncate($f, 0);
fclose($f);
}
file_put_contents("products.json", $final);
最终不会以您当前正在阅读的方式保存products.json。使用上面提供的代码,它可能最终看起来像这样:
[
{"id":1474753066818,"name":"dd","brand":"dd","price":"12"},
{"id":1474753069035,"name":"dd3","brand":"dd","price":"12"}
]