我有以下功能:
public static function toArray($key, $value) {
$e = explode('.', $key);
$return = array();
for($i = count($e) - 1; $i >= 0; $i--) {
$return = array($e[$i] => $return);
}
return $return;
}
和输出:
Array
(
[app] => Array
(
[shifts] => Array
(
[total] => Array
(
)
)
)
)
期望的输出:
Array
(
[app] => Array
(
[shifts] => Array
(
[total] => 3
)
)
)
这里发生的是给出一个字符串,并使用点作为分隔符创建一个多维数组。但是,我希望为最后一个数组分配一个由函数给出的值。这个例子假设字符串输入为:" apps.shifts.total" ,值为3.我试图找到一种优雅的方法来实现这一点进入无用的循环。任何灵感都将非常感激!
答案 0 :(得分:1)
您的初始化步骤错误。
尝试:
public static function toArray($key, $value) {
$e = explode('.', $key);
$return = $value; // MODIFIED HERE
for($i = count($e) - 1; $i >= 0; $i--) {
$return = array($e[$i] => $return);
}
return $return;
}
你基本上做的是级联到顶部。但是你从一个空数组开始。相反,您可以简单地从值开始并在其周围级联数组。
示例(使用互动php -a
):
$ php -a
Interactive mode enabled
php > function toArray($key, $value) {
php { $e = explode('.', $key);
php { $return = $value; // MODIFIED HERE
php { for($i = count($e) - 1; $i >= 0; $i--) {
php { $return = array($e[$i] => $return);
php { }
php { return $return;
php { }
php > var_dump(toArray('apps.shifts.total',3));
array(1) {
["apps"]=>
array(1) {
["shifts"]=>
array(1) {
["total"]=>
int(3)
}
}
}