[英]PHP multidimensional array: append indexed multidimensional array based on var
我正在使用多维数组,并在对字符串使用explode
后访问它们。 生成的数组应该与“。”的出现次数一起嵌套。 在给定的字符串中。 例如,foo.bar.ok 是 ['foo']['bar']['ok']。
目前,我正在做:
switch (count($_match)):
case 1:
$retVal = str_replace('{' . $match . '}', $$varName[$_match[0]], $retVal);
break;
case 2:
$retVal = str_replace('{' . $match . '}', $$varName[$_match[0]][$_match[1]], $retVal);
break;
case 3:
$retVal = str_replace('{' . $match . '}', $$varName[$_match[0]][$_match[1]][$_match[2]], $retVal);
break;
endswitch;
典型地,我想使用循环无限数量的$_match[x]
。
编辑结果数组应采用以下格式:$array[foo][bar][ok]
以下是我尝试的一些示例:
$string = 'foo.bar.ok';
$exploded = explode('.', $string);
$bracketed = array_map(function($x) { return [$x]; }, $exploded);
echo "<pre>";var_dump($bracketed);
$bracketed = array_map(function($x) { return "['$x']"; }, $_match);
$result = implode('', $bracketed);
var_dump(eval('return $t' . $result . ';'));
第一个不会在嵌套结构中附加数组,它将它们列为 0、1、2 等,第二个有效,但它使用 eval。
最后,按照建议使用循环。
for ($replace = $$varName[$_match[0]], $i = 1; $i < count($_match); $i++) {
if (isset($replace[$_match[$i]]))
$replace = $replace[$_match[$i]];
}
if (is_string($replace) || is_numeric($replace))
$retVal = str_replace('{' . $match . '}', $replace, $retVal);
我想看看一个有效的 array_walk 例子吗? - 谢谢你!
使用array_map()
和implode()
。
$string = 'foo.bar.ok';
$exploded = explode('.', $string);
$bracketed = array_map(function($x) { return "[$x]"; }, $exploded);
$result = implode('', $bracketed);
所以你想执行$$varName[$_match[0]][$_match[1]][$_match[2]...[$_match[count($_match)-1]
?
for ($var_name = $varName[$_match[0]], $i=1; $i<count($_match); $i++) {
$var_name = $var_name[$_match[$i]];
}
$retVal = str_replace('{' . $match . '}', $$var_name, $retVal);
这可以通过将for()
替换为array_walk()
来改进。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.