От 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"
}
Сценарий, используемый для выполнения этого вывода, следующий:
<?php
function buildVirtualData($data)
{
if (is_array($data)) {
foreach ($data as $val) {
$chk = buildVirtualData($val);
if ($chk) {
$json_obj = json_decode($val, true);
foreach ($json_obj as $key1 => $json_sub_obj) {
foreach ($json_sub_obj as $key2 => $value2) {
if ('true' === $value2) {
$json_obj[$key1][$key2] = true;
} elseif ('false' === $value2) {
$json_obj[$key1][$key2] = false;
} elseif (is_array($value2)) {
$temp = [];
foreach ($value2 as $keyof => $valueof) {
$temp[$keyof] = buildVirtualData($valueof);
}
$json_obj[$key1][$key2] = $temp;
}
}
}
return $json_obj;
} elseif (false == $chk && is_array($val)) {
$temp = [];
foreach ($val as $key => $value) {
$temp[$key] = buildVirtualData($value);
}
$val = $temp;
return $val;
} else {
if ('true' === $val) {
$val = true;
} elseif ('false' === $val) {
$val = false;
}
return $val;
}
}
} else {
return $chk = valJson($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);
Основная проблема заключается в том, что отсутствует последний массив элементов:
["other_data"]=>
string(11) "other_data"
- как я могу предотвратить потерю данных?
- этот скрипт можно попроще?