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 );