繁体   English   中英

PHP数组作为变量名

[英]PHP array as variable name

如何发送php array vairable的索引名称。

数组是

$array = array('Somthing'=>array('More'=>array('id'=> 34)));

现在我想显示这个东西,但是有一个变量名,我不知道如何解释所以我写了我想要的东西。

$index_name = '[Something][More][id]';

$array{$index_name};

有可能吗?

不是那样的。 这是你如何做到的:

$array['Something']['More']['id']

如果您特别想要使用单个字符串访问多维数组,那么您可以构建一个函数来执行此操作:

function array_multi(Array $arr, $path) {
    $parts = explode(".", $path);

    $curr =& $arr;
    for ($i = 0, $l = count($parts); $i < $l; ++$i) {
        if (!isset($curr[$parts[$i]])) {
            // path doesn't exist
            return null;
        } else if (($i < $l - 1) && !is_array($curr[$parts[$i]]) {
            // path doesn't exist
            return null;
        }
        $curr =& $curr[$parts[$i]];
    }
    return $curr;
}

// usage:
echo array_multi($array, "Something.More.id");    // 34
echo array_multi($array, "Something.More");       // array("id" => 34)

使用方括号支持语法的递归版本:

$array = array('Something'=>array('More'=>array('id'=> 34)));

$string = '[Something][More][id]';

echo scan_array($string, $array);

function scan_array($string, $array) {
    list($key, $rest) = preg_split('/[[\]]/', $string, 2, PREG_SPLIT_NO_EMPTY);
    if ( $key && $rest ) {
        return scan_array($rest, $array[$key]);
    } elseif ( $key ) {
        return $array[$key];
    } else {
        return FALSE;
    }
}

您可以使用eval()执行此操作:

<?php

$array = array('Somthing'=>array('More'=>array('id'=> 34)));
$index_name = "['Somthing']['More']['id']";

$stmt='echo $array'.$index_name.';';
eval($stmt);

?>

更新:

似乎有些SO用户对使用eval()的想法感到不舒服。 我认为在决定是否在您自己的代码中使用它之前阅读这个讨论优缺点的线程是有意义的。

好的,我知道这是人们被枪杀的方式。 但是来吧, eval()并不总是错误的答案。

$array = array('Something'=>array('More'=>array('id'=> 34)));
$index_name = '[Something][More][id]';
eval('$val = $array'.$index_name.';'); // Wrap in a function or something

如果你已经陷入困境,需要做这样的事情,你很有可能以糟糕的方式做其他事情。 这样做是有正当理由的,但不是很常见。

function key_path($arr, $keys) {
    return $keys ? key_path($arr[array_shift($keys)], $keys) : $arr;
}

$arr['Something']['More']['id'] = 34;
$keys = array('Something', 'More', 'id');

var_dump( key_path($arr, $keys));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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