是否可以在PHP中执行类似的操作?
$index1 = "[0][1][2]";
$index2 = "['cat']['cow']['dog']";
// I want this to be $myArray[0][1][2]
$myArray{$index1} = 'stuff';
// I want this to be $myArray['cat']['cow']['dog']
$myArray{$index2} = 'morestuff';
我已经搜索了一个解决方案,但我认为我不知道解决这个问题所涉及的关键字。
答案 0 :(得分:4)
eval('$myArray[0][1][2] = "stuff";');
eval('$myArray'.$index1.' = "stuff";');
但是在使用eval和用户输入时要小心,因为它容易受到代码注入攻击。
答案 1 :(得分:3)
不直接。 $myArray[$index]
将评估为$myArray['[0][1][2]']
。您可能需要分隔每个维度或编写一个小函数来解释字符串:
function strIndexArray($arr, $indices, $offset = 0) {
$lb = strpos($indices, '[', $offset);
if ($lb === -1) {
return $arr[$indices];
}
else {
$rb = strpos($indices,']', $lb);
$index = substr($indices, $lb, $rb - $lb);
return strIndexArray($arr[$index], substr($indices, $rb+1));
}
}
你可能会找到一些正则表达式来更容易地提取索引,这些索引会导致类似:
$indices = /*regex*/;
$value = '';
foreach($indices as $index) {
$value = $array[$index];
}
要在数组中设置值,可以使用以下函数:
function setValue(&$arr, $indices, $value) {
$lb = strpos($indices, '[');
if ($lb === -1) {
$arr = $value;
}
else {
$rb = strpos($indices, ']', $lb);
$index = substr($indices, $lb, $rb);
setValue($arr[$index], substr($indices, $lb, $rb+1), $value);
}
}
注意:我在答案编辑器中创建了上面的代码,因此它可能包含一两个错字; )
答案 2 :(得分:1)
$index1 = "[0][1][2]";
$index2 = "['cat']['cow']['dog']";
function myArrayFunc(&$myArray,$myIndex,$myData) {
$myIndex = explode('][',trim($myIndex,'[]'));
$m = &$myArray;
foreach($myIndex as $myNode) {
$myNode = trim($myNode,"'");
$m[$myNode] = NULL;
$m = &$m[$myNode];
}
$m = $myData;
}
// I want this to be $myArray[0][1][2]
myArrayFunc($myArray,$index1,'stuff');
// I want this to be $myArray['cat']['cow']['dog']
myArrayFunc($myArray,$index2,'morestuff');
var_dump($myArray);
答案 3 :(得分:0)
总有邪恶的评价:
eval('$myArray' . $index1 . ' = "stuff";');
答案 4 :(得分:-3)
您可以使用两个匿名函数。
$getThatValue = function($array){ return $array[0][1][2]; };
$setThatValue = function(&$array, $val){ $array[0][1][2] = $val; };
$setThatValue($myArray, 'whatever');
$myValue = $getThatValue($myArray);