Если я правильно понял ваш вопрос, вы просите преобразовать строку "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 не могут начинаться с цифры.