我的key/value
变量中有以下$_POST
:
Array
(
'translations_0_comment' => 'Greetings from UK'
)
我想要的是将此值设置为以下数组
$data[translations][0][comment] = 'Greetings from UK';
所以我的想法是,我的KEY
值中可以包含任何内容,并且我将填充数组。
有没有安全的方法可以在不使用eval()
的情况下执行此操作?
感谢所有帮助。
更新:
这是eval()
foreach ($_POST as $key => $dataValue) {
$a = explode("_", $key);
$builder = '$object';
foreach ($a as $value) {
$builder.='['.$value.']';
}
$builder.=' = '.$dataValue.';';
eval($builder);
}
答案 0 :(得分:5)
我认为你正在寻找这个
function set_value($object, $paths, $value, $index){
$key = $paths[$index];
$sub_object = $object[$key];
if (!is_array($sub_object)){
$object[$key] = $value;
}else{
$index = $index+1;
$object[$key] = set_value($sub_object, $paths, $value, $index);
}
return $object;
}
答案 1 :(得分:1)
我认为this正是您所寻找的
实施例
在生成$ _POST数据的表单中,重命名输入属性,如下所示
<input name="data[translations][0][comment]" />
现在您的$_POST['data']
将是一个数组
答案 2 :(得分:1)
explode()
就是您所需要的:
$data = array();
foreach ($postData as $key => $val) {
$explodedKey = explode('_', $key);
$data[$explodedKey[0]][$explodedKey[1]][explodedKey[2]] = $val;
}
无需使用eval()
。
答案 3 :(得分:0)
$data = array();
foreach ($_POST as $keys => $val) {
$keys_list = explode('_', $keys);
$link = &$data;
foreach ($keys_list as $key) {
$link[$key] = $val;
$link = &$link[$key];
}
}
答案 4 :(得分:0)
先试试这个。
$array = array
(
'TRY_THIS_ONE_SIR_PLEASE_THANKS' => 'Greetings from UK'
);
$array1 = array_keys($array);
$arrValue = array_values($array);
$array1 = explode("_", $array1[0]);
$ctr = count($array1);
for($i=0; $i<$ctr; $i++)
{
$start .= "array(\"".$array1[$i]."\" => ";
$end .=")";
}
$start = $start ."\"".$arrValue[0]."\"".$end;
eval("\$arr = $start;");
print_r($arr);