PHP:在多维数组中将变量用作多个键

PHP:在多维数组中将变量用作多个键,php,variables,multidimensional-array,Php,Variables,Multidimensional Array,在普通阵列中,您可以这样选择 $key='example'; echo $array[$key]; 在多维空间里怎么样 $keys='example[secondDimension][thirdDimension]'; echo $array[$keys]; 正确的方法是什么?必须为数组的每个维度使用单独的变量。您在多维数组中看到的一种常见模式是,您需要对第二维执行某些操作: $pets = [ 'dog' => ['Jack', 'Fido', 'Woofie'],

在普通阵列中,您可以这样选择

$key='example';
echo $array[$key];
在多维空间里怎么样

$keys='example[secondDimension][thirdDimension]';
echo $array[$keys];

正确的方法是什么?

必须为数组的每个维度使用单独的变量。您在多维数组中看到的一种常见模式是,您需要对第二维执行某些操作:

$pets = [
    'dog' => ['Jack', 'Fido', 'Woofie'],
    'cat' => ['Muggles', 'Snowball', 'Kitty'],
];

// Loop through keys in first dimension
foreach ($pets as $type => $names) {

    foreach ($names as $index => $name) {

        // And do something with second dimension using the variable
        // you've gained access to in the foreach
        $pets[$type][$index] = strtoupper($name);

    }

}

我认为这个解决方案是好的

请注意,必须用“[”和“]”包装所有键

了解更多有关函数的信息

如果还想检查值是否已定义,则可以使用此函数

function array_check_is_value_set_from_plain_keys($array, $keys)
{
    $result;

    $keys = str_replace(array('[', ']'), array("['", "']"), $keys); // wrapping with "'" (single qoutes)

    eval('$result = isset($array' . $keys . ');');

    return $result;
}

请给该函数起一个更好的名字。^

以下是一个不使用eval的解决方案:

$array = [
    'example' => [
        'secondDimension' => [
            'thirdDimension' => 'Hello from 3rd dimension',
        ],
    ],
];

$keys = '[example][secondDimension][thirdDimension]';

function get_array_value( $array, $keys ) {
    $keys = explode( '][', trim( $keys, '[]' ) );

    return get_recursive_array_value( $array, $keys );
}

function get_recursive_array_value( $array, $keys ) {
    if ( ! isset( $array[ $keys[0] ] ) ) {
        return null;
    };
    $res = $array[ $keys[0] ];
    if ( count( $keys ) > 1 ) {
        array_shift( $keys );

        return get_recursive_array_value( $res, $keys );
    } else {
        return $res;
    }
}

echo get_array_value( $array, $keys );

你需要使用两个变量。3个变量作为问题中的示例。对,我的意思是作为键<代码>$example[$key1][$key2]我理解,我希望在按键数量可能不同的情况下,有一种更好的内置方式来实现这一点。使用
eval()
通常是一个坏主意,尤其是如果有任何用户输入的可能性。实际上,这与我所寻找的非常接近。。。在花时间真正关注你所做的事情之后。实际上我已经试过用eval来做了。你搞定了。谢谢是的,杰里米,我知道eval的安全问题。依我看,只要你确定没有用户输入可以进入混合模式,它就应该是安全的。也可以在函数中添加一些转义以确保额外的安全性,但最好的情况是远离用户输入。这绝对是我要记住的。也谢谢你。谢谢你的评论。这是我处理多维数组的典型方式。在这种情况下,我正在寻找一种能够以低成本达到极端和可变深度的产品。。。特别是内置的东西。无论如何,谢谢!
$array = [
    'example' => [
        'secondDimension' => [
            'thirdDimension' => 'Hello from 3rd dimension',
        ],
    ],
];

$keys = '[example][secondDimension][thirdDimension]';

function get_array_value( $array, $keys ) {
    $keys = explode( '][', trim( $keys, '[]' ) );

    return get_recursive_array_value( $array, $keys );
}

function get_recursive_array_value( $array, $keys ) {
    if ( ! isset( $array[ $keys[0] ] ) ) {
        return null;
    };
    $res = $array[ $keys[0] ];
    if ( count( $keys ) > 1 ) {
        array_shift( $keys );

        return get_recursive_array_value( $res, $keys );
    } else {
        return $res;
    }
}

echo get_array_value( $array, $keys );