首页 > 解决方案 > 将字符串转换为多维数组

问题描述

如何将字符串 test[1][2][3][4][5] 转换为多维 PHP 数组,例如:

array(1 => array(2 => array( 3 => array( 4 => array(5 => array())))); 

标签: phparraysstring

解决方案


如果我正确理解了您的问题,您要求将字符串转换"test[1][2][3][4][5]"array(1 => array(2 => array( 3 => array( 4 => array(5 => array()))));

首先,人们通常使用简写array()法,即 just []

第二,为什么要使用字符串,当你可以输入的时候

$test[1][2][3][4][5] = [];

得到你想要的。


如果你真的想要字符串,你可以通过多种方式来实现,其中之一是:

function makeArrayFromString($string, &$name)
{
    $namePosEnd = strpos($string, '['); // name ends when first [ starts
    if (!$namePosEnd) return false; // didn't find [ or doesn't start with name

    $name = substr($string, 0, $namePosEnd);

    $dimensionKeys = [];
    $result = preg_match_all('/\[([0-9]+)\]/', $string, $dimensionKeys); // get keys
    if (!$result) return false; // no matches for dimension keys

    $dimensionKeys = array_reverse($dimensionKeys[1]);
    $multiArray = [];

    foreach ($dimensionKeys as $key)
    {
        $key = (int)$key; // we have string keys, turn them to integers
        $temp = [];
        $temp[$key] = $multiArray;
        $multiArray = $temp;
    }

    return $multiArray;
}

$string = 'test[1][2][3][4][5]';
$name = '';
$multiArray = makeArrayFromString($string, $name);

if ($multiArray === false)
    exit('Error creating the multidimensional array from string.');

$$name = $multiArray; // assign the array to the variable name stored in $name
var_dump($test); // let's check if it worked!

输出:

array(1) {
  [1]=>
  array(1) {
    [2]=>
    array(1) {
      [3]=>
      array(1) {
        [4]=>
        array(1) {
          [5]=>
          array(0) {
          }
        }
      }
    }
  }
}

请记住,如果 $name 字符串满足 PHP 变量命名规则,我没有添加任何检查。因此,如果您执行类似的操作,可能会出现错误111onetest[1][2][3][4][5],因为 PHP 中的变量名不能以数字开头。


推荐阅读