当前位置: 首页 > 面试题库 >

使用字符串访问(可能很大)多维数组

笪栋
2023-03-14
问题内容

我在想办法简单地分析字符串输入并在多维数组中找到正确的位置时遇到了麻烦。

我希望有一到两行能够做到这一点,因为我看到的解决方案依赖于较长的(10-20行)循环。

考虑下面的代码(注意,嵌套 可能 ,理论上是任意深度的):

function get($string)
{
    $vars = array(
        'one' => array(
            'one-one' => "hello",
            'one-two' => "goodbye"
        ),
        'two' => array(
            'two-one' => "foo",
            'two-two' => "bar"
        )
    );

    return $vars[$string]; //this syntax isn't required, just here to give an idea
}

get("two['two-two']");  //desired output: "bar".  Actual output: null

是否可以简单地使用内置函数或其他易于重新创建所需输出的函数?


问题答案:

考虑$vars为您的变量,你想获得one['one-one']two['two- two']['more']从(演示):

$vars = function($str) use ($vars)
{
    $c = function($v, $w) {return $w ? $v[$w] : $v;};
    return array_reduce(preg_split('~\[\'|\'\]~', $str), $c, $vars);
};
echo $vars("one['one-one']"); # hello
echo $vars("two['two-two']['more']"); # tea-time!

这是乐星串入 密钥 令牌,然后遍历$vars在阵列 带键 的值,而$vars阵列已变成了功能

旧资料:

用一个只是eval的函数重载数组:

$vars = array(
    'one' => array(
        'one-one' => "hello",
        'one-two' => "goodbye"
    ),
    'two' => array(
        'two-one' => "foo",
        'two-two' => "bar"
    )
);

$vars = function($str) use ($vars)
{
    return eval('return $vars'.$str.';');
};

echo $vars("['one']['one-two']"); # goodbye

如果您不喜欢eval,请更改实现:

$vars = function($str) use ($vars)
{
    $r = preg_match_all('~\[\'([a-z-]+)\']~', $str, $keys);
    $var = $vars;
    foreach($keys[1] as $key)
        $var = $var[$key];
    return $var;
};
echo $vars("['one']['one-two']"); # goodbye


 类似资料:
  • 问题内容: 我有阵列 转换为字符串: 串: 以及如何将此字符串转换回数组? 问题答案: 尝试我的stringToDeep()方法转换回Array。

  • 在C++中将二维字符数组复制到一维数组字符串中最简单的方法是什么? 大概是这样的: 问候蒂尔曼

  • 本文向大家介绍Java程序访问字符串字符,包括了Java程序访问字符串字符的使用技巧和注意事项,需要的朋友参考一下 要在Java中访问字符串的字符,请使用方法。该位置将作为参数添加。 假设我们有以下字符串- 让我们使用method在第4个位置找到字符。 以下是最后一个示例。 示例 输出结果

  • 问题内容: 我想,以取代所有和使用 但我不喜欢我的代码… 有没有比以下方法更有效的方法: ? toLowerCase()就在那里,因为我也希望它也小写… 问题答案: 编辑: 使用正则表达式,并且在字符类内部使用仅识别一个而不是任何字符。

  • 问题内容: 我正在尝试使用通过函数传递的变量访问JSON: 显然,这是行不通的,因为“类别”是我通过函数传递的内容,而不是属性的真实名称,但是我一直尝试尝试不同的可能性。提前致谢! 问题答案: 在JS中,是的同义词。 另外,您正在处理的是JavaScript对象,而不是JSON(尽管它可能 起源于 JSON ) *对于遇到这种情况并使用ES6的用户进行 *更新 ,现在可以在分配过程中使用变量: 作

  • 问题内容: 我有一个像这样的JSON数组: 我想通过将ID,列名和新值传递给函数来更新它: 我的问题是,如何更新值?我知道我可以做以下事情: 但是出于我的原因,列名是作为字符串传递的。 问题答案: 在JavaScript中,您可以使用文字符号访问对象属性: 或使用带括号的表示法,使用字符串作为属性名称: 这两个语句的作用 完全相同 ,但是在第二个语句的情况下,由于括号中的内容是字符串,因此它可以是