所以我的问题是:
"res[0]['links'][0]"
$res['0']['links']['0']
我试过了:
$result = "res[0]['links'][0]";
$$result = array("id"=>'1',"class"=>'3');
$result = "res[0]['links'][1]";
$$result = array("id"=>'3',"class"=>'9');
当print_r($ res) 我明白了:
<b>Notice</b>: Undefined variable: res in <b>/home/fanbase/domains/fanbase.sportbase.pl/public_html/index.php</b> on line <b>45</b>
我需要看看:
Array
(
[0] => Array
(
[links] => Array
(
[0] => Array
(
[id] => 1
[class] => 3
)
)
)
[1] => Array
(
[links] => Array
(
[0] => Array
(
[id] => 3
[class] => 9
)
)
)
)
感谢您的帮助。
答案 0 :(得分:1)
所以你有一个数组结构的描述,以及填充它的东西。这是可行的,例如:
function array_create(&$target, $desc, $fill) {
preg_match_all("/[^\[\]']+/", $desc, $uu);
// unoptimized, always uses strings
foreach ($uu[0] as $sub) {
if (! isset($target[$sub])) {
$target[$sub] = array();
}
$target = & $target[$sub];
}
$target = $fill;
}
array_create( $res, "[0]['links'][0]", array("id"=>'1',"class"=>'3') );
array_create( $res, "[0]['links'][1]", array("id"=>'3',"class"=>'9') );
注意数组名称本身不是结构描述符的一部分。但理论上你可以保留它。而是使用array_create()
变量调用$tmp
函数,然后调用它extract()
以获得所需效果:
array_create($tmp, "res[0][links][0]", array(1,2,3,4,5));
extract($tmp);
另一个懒惰的解决方案是在将数组描述与数据数组组合为URL编码字符串的循环之后使用str_parse。
答案 1 :(得分:1)
我有一个非常愚蠢的方法,你可以试试这个:-)
假设你的字符串是"res[0]['links'][0]"
首先在其中附加$
然后放入eval命令,它会真的让你震惊。请遵循以下示例
$tmp = '$'.'res[0]['links'][0]'.'= array()';
eval($tmp);
现在您可以使用数组$res
100%的解决方法和: - )
`
答案 2 :(得分:0)
$res = array();
$res[0]['links'][0] = array("id"=>'1',"class"=>'3');
$res[0]['links'][0] = array("id"=>'3',"class"=>'9');
print_r($res);
但首先阅读评论并首先了解数组。
答案 3 :(得分:0)
除了mario的回答之外,我还使用了php.net注释中的另一个函数来组合输入数组(从jquery形式的serializeArray输出):
[2] => Array
(
[name] => apple[color]
[value] => red
)
[3] => Array
(
[name] => appleSeeds[27][genome]
[value] => 201
)
[4] => Array
(
[name] => appleSeeds[27][age]
[value] => 2 weeks
)
[5] => Array
(
[name] => apple[age]
[value] => 3 weeks
)
[6] => Array
(
[name] => appleSeeds[29][genome]
[value] => 103
)
[7] => Array
(
[name] => appleSeeds[29][age]
[value] => 2.2 weeks
)
到
Array
(
[apple] => Array
(
[color] => red
[age] => 3 weeks
)
[appleSeeds] => Array
(
[27] => Array
(
[genome] => 201
[age] => 2 weeks
)
[29] => Array
(
[genome] => 103
[age] => 2.2 weeks
)
)
)
这允许维护数字键,而不增加array_merge的附加值。所以,我使用了这样的序列:
function MergeArrays($Arr1, $Arr2) {
foreach($Arr2 as $key => $Value) {
if(array_key_exists($key, $Arr1) && is_array($Value)) {
$Arr1[$key] = MergeArrays($Arr1[$key], $Arr2[$key]);
}
else { $Arr1[$key] = $Value; }
}
return $Arr1;
}
function array_create(&$target, $desc, $fill) {
preg_match_all("/[^\[\]']+/", $desc, $uu);
foreach ($uu[0] as $sub) {
if (! isset($target[$sub])) {
$target[$sub] = array();
}
$target = & $target[$sub];
}
$target = $fill;
}
$input = $_POST['formData'];
$result = array();
foreach ($input as $k => $v) {
$sub = array();
array_create($sub, $v['name'], $v['value']);
$result = MergeArrays($result, $sub);
}