Преобразовать строку в многомерный массив - PullRequest
0 голосов
/ 05 января 2020

Как мне преобразовать строковый тест [1] [2] [3] [4] [5] в многомерный массив PHP, например:

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

1 Ответ

0 голосов
/ 06 января 2020

Если я правильно понял ваш вопрос, вы просите преобразовать строку "test[1][2][3][4][5]" в array(1 => array(2 => array( 3 => array( 4 => array(5 => array()))));

Прежде всего, люди обычно используют краткую запись array(), которая просто [].

Во-вторых, зачем использовать строки, когда вы можете просто набрать

$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 не могут начинаться с цифры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...