为了账号安全,请及时绑定邮箱和手机立即绑定

请求与 JSON 字符串和数组字段混合,减少自定义函数中丢失数据的情况

请求与 JSON 字符串和数组字段混合,减少自定义函数中丢失数据的情况

PHP
慕娘9325324 2023-09-15 14:39:52
从POST请求中我得到和混合结构JSON和字段Array;处理多种类型的元素;我已经执行和 var_dump 来获取通行证$_POST并得到这个:array(2) {  ["json_data"]=>  string(677) "[{"firstname":""},{"lastname":""},{"email":""},{"countryCode":""},{"phone":""},{"i_signup_password":""},{"i_signup_password_rep":""},{"email":""},{"i_signin_password":""},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"}]",  ["other_data"]=>  string(11) "Other_Data"}在 PHP 服务器端,我正在执行一个函数,将其减少$_POST为这个数组:array(10) {  ["firstname"]=>  string(0) ""  ["lastname"]=>  string(0) ""  ["email"]=>  string(0) ""  ["countryCode"]=>  string(0) ""  ["phone"]=>  string(0) ""  ["i_signup_password"]=>  string(0) ""  ["i_signup_password_rep"]=>  string(0) ""  ["i_signin_password"]=>  string(0) ""  ["form"]=>  string(11) "d-sys-login"  ["process"]=>  string(8) "e-signin"}主要问题是最后一个成员数组丢失:  ["other_data"]=>     string(11) "other_data"我怎样才能防止丢失数据?这个脚本可以更简单吗?
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

解决方案脚本,但需要使其更简单:


<?php

    function buildVirtualData($data)

    {

    

        if (is_array($data)) {

            $temp = [];

            foreach ($data as $key => $value) {

                $temp[$key] = buildVirtualData($value);

            }

            return reduArray($temp);

        } elseif (valJson($data)) {

            $json_obj = json_decode($data, true);

            foreach ($json_obj as $key1 => $json_sub_obj) {

                foreach ($json_sub_obj as $key2 => $value2) {

                    if (is_array($value2)) {

                        $temp = [];

                        foreach ($value2 as $keyof => $valueof) {

                            $temp[$keyof] = buildVirtualData($valueof);

                        }

                        $json_obj[$key1][$key2] = $temp;

                    } else {

                        if ('true' === $value2 || true === $value2) {

                            $json_obj[$key1][$key2] = true;

                        } elseif ('false' === $value2 || false === $value2) {

                            $json_obj[$key1][$key2] = false;

                        } else {

                            $json_obj[$key1][$key2] = $value2;

                        }

                    }

                }

                return reduArray($json_obj);

            }

        } else {

            if ('true' === $data || true === $data) {

                $data = true;

            } elseif ('false' === $data || false === $data) {

                $data = false;

            }

            return $data;

        }

    }

    

    function valJson($var)

    {

        if (!is_array($var)) {

            return ((json_decode($var) != null) &&

                (is_object(json_decode($var)) || is_array(json_decode($var)))) ? true : false;

        } else {

            return false;

        }

    }

    function reduArray($array)

    {

        $result = $array;

        if (is_array($array)) {

            $check = true;

            foreach ($array as $key => $value) {

                if (!is_array($value)) {

                    $check = false;

                    break;

                }

            }

            if ($check) {

                $result = array_reduce($array, 'array_merge', []);

            }

        }

        return $result;

    }

    

    $_POST=[];

    $_POST['JsonData']='[{"firstname":""},{"lastname":""},{"email":""},{"countryCode":""},{"phone":""},{"i_signup_password":""},{"i_signup_password_rep":""},{"email":""},{"i_signin_password":""},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"},{"form":"d-sys-login"},{"process":"e-signin"}]';

    $_POST['otherdata']='otherdata';

    $_POST=buildVirtualData($_POST);

    $_POST=reduArray($_POST);

    echo var_dump($_POST);



查看完整回答
反对 回复 2023-09-15
  • 1 回答
  • 0 关注
  • 58 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信