PHP - 从分隔字符串创建多维关联数组

3

您能把这个字符串转换吗:

"package.deal.category"

把它转换成这样的数组:

$array['package']['deal']['category']

此时索引内的值可以是任何值。

1
你的问题有点令人困惑。$array['package']['deal']['category'] 的值应该是什么?你定义了一个索引来访问,但没有给出一个值。 - Horatio Alderaan
编辑了问题。抱歉,我更关心的是数组本身,而不是存储在底层索引中的内容。 - JayNCoke
3个回答

9

你尝试过什么?这个问题的绝对答案非常简单:

在你询问别人之前,先自己尝试解决问题。

$keys = explode('.', $string);
$array = array();
$arr = &$array;
foreach ($keys as $key) {
   $arr[$key] = array();
   $arr = &$arr[$key];
}
unset($arr);

...但是这对你有什么用呢?


谢谢,@tandu!我承认,如果我花时间看问题,我可能本来就能解决它。我很少在这里问问题,除非我绝对需要。看了你的解决方案后,我有了一个“当然,傻瓜”的时刻。虽然它有用,但我相信那是一个完全不同的讨论。 - JayNCoke
@Exp 请在您有时间时为这个答案添加一个教育性的解释。 - mickmackusa

0
$text = 'package.deal.category';

// convert 'package.deal.category' into ['package', 'deal', 'category']
$parts = explode('.', $text);

// changes ['package', 'deal', 'category'] into ['category', 'deal', 'package']
$revparts = array_reverse($parts);

// start with an empty array.
// in practice this should probably
// be the "value" you wish to store.
$array = [];

// iteratively wrap the given array in a new array
// starting with category, then wrap that in deal
// then wrap that in package
foreach($revparts as $key) $array = [$key => $array];

print_r($array);

0

我知道这个问题已经被问过一段时间了,但是对于其他寻找不涉及循环的可能答案的人来说,可以尝试使用JSON。

要使 $array['key1']['key2'] = $value

$key = 'Key1.Key2';
$delimiter = '.';
$value = 'Can be a string or an array.';

$jsonkey = '{"'.str_replace($delimiter, '":{"', $key).'":';
$jsonend = str_repeat('}', substr_count($jsonkey, '{'));
$jsonvalue = json_encode($value);
$array = json_decode($jsonkey.$jsonvalue.$jsonend, true);

手动编写JSON字符串的问题在于它可能不可靠(更不用说难以遵循编码逻辑了)。我不会支持这种技术。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接