我有一个名为$ data的数组,需要使用来自ajax调用的数据进行更新。
通过ajax调用发送了两个变量(带有示例输入):
sectionDetails :
[111][0][2][0][service_providers][]
serviceProvider :
Google
serviceProvider是数据,sectionDetails是serviceProvider应该在$ data数组中的数组。
我需要的是最终的$ data数组:
$data = Array
(
[111] => Array
(
[0] => Array
(
[2] => Array
(
[0] => Array
(
[service_providers] => Array
(
[0] = Google
)
)
)
)
)
)
这样,我可以动态地将数据输入到任何单元格中,然后我可以更新特定的数组(例如$data[111][0][2][0][service_providers][0]
= "Yahoo"
;
$_POST['sectionDetails']
是一个问题所在的字符串。
有没有办法将此字符串更改为可以附加到主$ data数组的数组(如果在同一部分中存在现有值,则更新该值)?
希望这是有道理的。
答案 0 :(得分:3)
如果您创建这样的函数:
function setToPath(&$data, $path, $value){
//$temp will take us deeper into the nested path
$temp = &$data;
//notice this preg_split logic is specific to your path syntax
$exploded = preg_split("/\]\[/", rtrim(ltrim($path,"["),"]"));
// Where $path = '[111][0][2][0][service_providers][]';
// $exploded =
// Array
// (
// [0] => 111
// [1] => 0
// [2] => 2
// [3] => 0
// [4] => service_providers
// [5] =>
// )
foreach($exploded as $key) {
if ($key != null) {
$temp = &$temp[$key];
} else if(!is_array($temp)) {
//if there's no key, i.e. '[]' create a new array
$temp = array();
}
}
//if the last index was '[]', this means push into the array
if($key == null) {
array_push($temp,$value);
} else {
$temp = $value;
}
unset($temp);
}
你可以像这样使用它:
setToPath($data, $_POST['sectionDetails'], $_POST['serviceProvider']);
print_r($data)
将返回:
Array
(
[111] => Array
(
[0] => Array
(
[2] => Array
(
[0] => Array
(
[service_providers] => Array
(
[0] => Google
)
)
)
)
)
)
答案 1 :(得分:1)
非常小心,根据具体情况,您可以使用eval
:
Access-Control-Allow-Origin
eval("\$data$sectionDetails = '$serviceProvider';");
将返回:
print_r($data)
<强>注意强> eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。