php - 将字符串转换为多维数组
问题描述
如何将字符串 test[1][2][3][4][5] 转换为多维 PHP 数组,例如:
array(1 => array(2 => array( 3 => array( 4 => array(5 => array()))));
解决方案
如果我正确理解了您的问题,您要求将字符串转换"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 中的变量名不能以数字开头。
推荐阅读
- android - 如何从 xml 中删除“阴影”以模拟 onClick?
- php - 停用或阻止当前订单状态
- tensorflow - tf.keras.experimental.export_saved_model 错误:__init__() 缺少 1 个必需的位置参数:'feature_columns'
- mysql - 数据库自动备份当前数据和时间
- angular - 使用管道的角度
- java - Outlook 禁止使用 R 中的 mailR 对某些电子邮件地址进行身份验证
- php - Wamp自动重写url?
- rest - 不持久化数据的资源
- java - 无法在 intellij 中运行 junit 测试 - 播放按钮变灰
- aem - 视力状况检查