【问题标题】:How can I use a string to get a value from a multi dimensional array?如何使用字符串从多维数组中获取值?
【发布时间】:2009-07-02 03:39:13
【问题描述】:

说这是我的字符串

$string = 'product[0][1][0]';

我怎样才能单独使用该字符串来实际从数组中获取值,就像我使用过这个一样:

echo $array['product'][0][1][0]

我已经用这个正则表达式 (/\[([0-9]+)\]/) 弄乱了 preg_match_all,但我无法想出令人满意的东西。

有什么想法吗?提前致谢。

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    您可以使用preg_split 来获取各个数组索引,然后使用循环来一一应用这些索引。这是一个使用粗略的 /[][]+/ 正则表达式将字符串拆分到找到一个或多个方括号的示例。

    (将[][] 结构读作[\]\[],即匹配右方括号或左方括号的字符类。反斜杠是可选的。)

    function getvalue($array, $string)
    {
        $indices = preg_split('/[][]+/', $string, -1, PREG_SPLIT_NO_EMPTY);
    
        foreach ($indices as $index) 
            $array = $array[$index];
    
        return $array;
    }
    

    【讨论】:

      【解决方案2】:

      这很 hacky,但这会奏效。也不知道你的数组结构会发生多大的变化,如果你变得太动态,这将不起作用。

      $array = array();
      
      $array['product'][0][1][0] = "lol";
      
      $string = 'product[0][1][0]';
      
      $firstBrace = strpos( $string, "[" );
      
      $arrayExp = substr($string, $firstBrace );
      $key = substr( $string, 0, $firstBrace );
      
      echo $arrayExp, "<br>";
      echo $key, "<br>";
      
      $exec = "\$val = \$array['".$key."']".$arrayExp.";";
      
      eval($exec);
      
      echo $val;
      

      【讨论】:

        【解决方案3】:

        使用eval()怎么样?

        <?php
          $product[0][1][0] = "test";
          eval ("\$string = \$product[0][1][0];");
          echo $string . "\n";
          die();
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-13
          • 2016-07-15
          • 2017-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-20
          相关资源
          最近更新 更多