繁体   English   中英

PHP多维数组:基于var追加索引多维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM