gpt4 book ai didi

php - 递归填充数组

转载 作者:行者123 更新时间:2023-11-29 00:07:25 26 4
gpt4 key购买 nike

我创建了一个方法来用 MySQL 行填充数组,每个级别用下划线分隔。我没有在 MySQL 中分隔列,因为有多个客户端端点使用 path 列作为引用。目前下划线不超过 3 个,但我允许更多。该库能够在内部引用它们(例如 self::$config['api']['version']),其中第一个键是需要它的库(例如 network )。

表格如下所示:

INSERT INTO `settings` (`id`, `path`, `name`, `value`, `type`, `enabled`) VALUES 
(19,'network_api_twilio_price','Twilio SMS Price','0.30',7,1),
(20,'network_api_version','API Version','1.0',7,1),
(21,'network_connection','Connectivity Enabled','true',1,1);

方法如下所示:

public static function getConfig($key) {
self::process('site', self::select([ 'path', 'value', 'type' ], 'rms2.settings', 'path', 'LIKE', $key . '_%'), __METHOD__);
$config = [ ];
foreach (self::fetch() as $value) {
$path = explode('_', substr($value['path'], strlen($key . '_')));
$n = count($path);
if ($value['type'] === '1') {
$value['value'] = ($value['value'] === 'true' || $value['value'] === '1') ? true : false;
}
switch ($n) {
case 5:
$config[$path[0]][$path[1]][$path[2]][$path[3]][$path[4]] = $value['value'];
break;
case 4:
$config[$path[0]][$path[1]][$path[2]][$path[3]] = $value['value'];
break;
case 3:
$config[$path[0]][$path[1]][$path[2]] = $value['value'];
break;
case 2:
$config[$path[0]][$path[1]] = $value['value'];
break;
case 1:
$config[$path[0]] = $value['value'];
break;
}
}
return $config;
}

这似乎不是处理我的配置的递归性质的理想方法。
有没有更好的方法将这些字符串解析成数组?

最佳答案

这很棘手,但是通过使用引用,您可以迭代地(或者如果您设置了一个函数则递归地)
这里的关键是使用$cur = &$cur[$v];嵌套新键

$path = explode('_', substr($value['path'], strlen($key . '_')));
$array = array();

// Start nesting new keys
$cur = &$array;
foreach($path as $v){
$cur[$v] = array();
$cur = &$cur[$v];
}

// Final assignnemnt
$cur = $value['value'];

ideone 直播:http://ideone.com/VtKqlD

关于php - 递归填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com