在PHP中获取具有特定键格式的数组值

时间:2018-05-17 05:25:51

标签: php arrays regex

考虑以下数组和函数:

$array = [
  'key' => [
    'key_2' => [
       'key_3' => 'Value 3'
    ]
  ],
];

function get_value( $key ) {
  echo $array . $key;
}

现在我想调用这样的函数:

get_value( 'key[key_2][key_3]' );

它给出了自然的错误。

可以以理解get_value并给出值的方式编写'key[key_2][key_3]'函数吗?

2 个答案:

答案 0 :(得分:2)

由于输入字符串似乎使用得非常松散,我会假设这可以被操作到更容易使用的东西。

在这里,我将键分解并循环它们并挖掘数组,直到我没有按键 请注意,返回可以是array或string / int / float / bool

function get_value($array, $key ) {
    $keys = explode(",", $key);
    Foreach($keys as $k){
        $array = $array[$k];
    }
    Return $array;
}

Var_dump(get_value($array, 'key,key_2,key_3' ));

https://3v4l.org/mnvOs

您可以使用str_replace的输入字符串 但我不理解其中的逻辑。它们都是键,但只有第二个和第三个键在它们周围[]

请参阅此处了解str_replace示例:https://3v4l.org/BObTk

答案 1 :(得分:1)

您无法将参数传递给代码中提到的函数。如果要打印所有值或打印特定键的值,您必须将该键作为字符串传递给该函数。

考虑以下示例:

function get_value( $key = null ) {
    $array = [
       'key' => [
          'key_2' => array(
             'key_3' => 'Value 3'
          )
       ],
    ];

    $keys = explode('|', $key);
    $result = '';
    foreach ($keys as $key) {
        if (empty($result)) {
            $result = $array[$key];       
        } else {
            $result = $result[$key];     
        }
    }

    echo $result;
}

现在,如果你传递了get_value(' key | key_2 | key_3'),这将有效。

php中的范围也与javascript中的范围不同。你无法访问函数内部的外部函数变量。有关范围Variable Scopes

的详细信息,请参阅此文章

希望这有帮助。