Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在JSON中找到一个值并将其取消设置?_Php_Json - Fatal编程技术网

Php 如何在JSON中找到一个值并将其取消设置?

Php 如何在JSON中找到一个值并将其取消设置?,php,json,Php,Json,所以基本上我有这个页面,它接受值,json_对它们进行编码,并将它们放在一个数组中,放在一个文件中。一切正常,但我唯一遇到的问题是,一旦某些值超过某个日期,就会删除它们 因此,基本上,代码是一个表单,其中有人输入他们的姓名、电子邮件、位置、日期和一条小消息。接下来,代码获取现有文件,将其转换为数组,并将新条目追加到数组中,使用新数组重写文件并关闭它。条目被转换为它们自己的小数组,因此文件中的主数组中包含数组。代码检查$item[2],它是日期,如果当前日期在该时间之后,则需要将其删除。我只是很难

所以基本上我有这个页面,它接受值,json_对它们进行编码,并将它们放在一个数组中,放在一个文件中。一切正常,但我唯一遇到的问题是,一旦某些值超过某个日期,就会删除它们

因此,基本上,代码是一个表单,其中有人输入他们的姓名、电子邮件、位置、日期和一条小消息。接下来,代码获取现有文件,将其转换为数组,并将新条目追加到数组中,使用新数组重写文件并关闭它。条目被转换为它们自己的小数组,因此文件中的主数组中包含数组。代码检查$item[2],它是日期,如果当前日期在该时间之后,则需要将其删除。我只是很难让它删除JSON以便删除条目

我知道这是很多,我的代码是非常混乱的,但我希望你能理解我在做什么

以下是比较日期的代码:

foreach ($arr as $help)
                      {
                        foreach ($help as $item)
                          {
                            if ($item[2] > date("Y-m-d H:i:s"))
                            {
                            //stuff happens here, ive just cut it out for simplicity.
}
                          else {
                            $delete = [$item[0],$item[1],$item[2],$item[3],$item[4]];
                            $delete2 = json_encode($delete);

                            $open = fopen('data.txt', 'r');
                            $inside = fread($open, filesize('data.txt'));
                            $newinside = json_decode($inside);
                            $newar = [$newinside];

                            $bean = array_search($delete, $newar);
                            echo $bean;


                          }
                          }

                      }
那个代码肯定是错的,但我已经试过了

以下是完全编码后的json文件:

[["Simon Long","simon@greatnessgroup.com","2018-01-01T01:01","test","aaa"],["test","test@gmail.com","2020-01-01T01:01","yeah","test\r\n"]]

我只是猜测我们有一个与问题中的输出类似的
$arr

在这里,我们循环遍历数组,然后使用一个简单的表达式逐个检查要排除的模式,例如
日期

/([0-9]{4}.+)/m
然后,我们取消设置
日期
,作为示例,然后
json\u将数组编码回json

$arr = '[["Simon Long", "simon@greatnessgroup.com", "2018-01-01T01:01", "test", "aaa"], ["test", "test@gmail.com", "2020-01-01T01:01", "yeah", "test\r\n"]]';
$arr = json_decode($arr, true);
foreach ($arr as $key => $value) {
    foreach ($value as $key2 => $value2) {
        $re = '/([0-9]{4}.+)/m';
        preg_match_all($re, $value2, $matches, PREG_SET_ORDER, 0);
        foreach ($matches as $key3 => $value3) {
            unset($arr[$key][$key2]);
        }

    }
}

print json_encode($arr);
输出
是的,这就是我要说的,我认为这是我的解决方案的框架,但我希望它检测一个日期,然后删除过期日期所在的整个数组。因此,它将删除周围的名称、电子邮件、消息等。
[{"0":"Simon Long","1":"simon@greatnessgroup.com","3":"test","4":"aaa"},{"0":"test","1":"test@gmail.com","3":"yeah","4":"test\r\n"}]