PHP 使用字符串作为数组键模式

Posted

技术标签:

【中文标题】PHP 使用字符串作为数组键模式【英文标题】:PHP use string as array key pattern 【发布时间】:2018-11-09 21:51:51 【问题描述】:

我需要一个字符串来将它用于数组模式以通过它来查找值。 例如

$test = ['test','test2' => ['test3','test4' => ['test5']]];
$pattern = "['test2']['test4']"
$response = $test$pattern <- search

给它一个解决方法?

【问题讨论】:

不知道你究竟想在这里做什么 我想在这种情况下作为这种模式的响应 test5 真的需要一个模式吗?可以$pattern = ['test2', 'test4']吗? @Barmar 我认为如果我们都尽最大努力假装eval() 不存在,这个世界将会变得最好。 现在看看你做了什么@Barmar 【参考方案1】:

基于另一个问题:Using a string path to set nested array data

function GetValueFromPattern($arr, $pattern) 
    $exploded = explode(".",$pattern);

    $temp = $arr;
    foreach($exploded as $key) 
        if(key_exists($key, $temp)) 
            $temp = $temp[$key];
         else 
            return ["status" => false];
        
    
    return ["status" => true, "response" => $temp];


$test = ['test','test2' => ['test3'=>"a",'test4' => ['test5']]];
$pattern = "test2.test3";
$response = GetValueFromPattern($test, $pattern);
if ($response["status"]) 
    echo $response["response"];
 else 
    echo "Error!";

【讨论】:

你肯定想折腾if(key_exists($key, $temp);) else /* error stuff */ 请注意,如果您想分配给结果,您只需要使用引用。否则你可以使用正常的赋值。 是的,您绝对不想从“getter”返回引用并在以后意外修改数组。 你是对的,我的错误。问题解决了,我将算法插入到一个新函数中来处理这个过程。

以上是关于PHP 使用字符串作为数组键模式的主要内容,如果未能解决你的问题,请参考以下文章

不能使用数字键作为字符串的PHP数组[重复]

php中数组可以使用哪些键名

PHP数组函数

PHP使用自定义键将字符串数组转换为二维数组

如何在php laravel中将数组键转换为随机字符串

php数组键中允许的字符?