将字符串数组(每个字符串都有点分隔值)转换为多维数组 [英] Convert an array of strings, each string has dot separated values, to a multidimensional array
本文介绍了将字符串数组(每个字符串都有点分隔值)转换为多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数组:
数组([0] =>收件箱.垃圾箱[1] =>收件箱.已发送[2] =>收件箱.草稿[3] =>INBOX.Test.sub 文件夹[4] =>INBOX.Test.sub 文件夹.test 2)
如何将此数组转换为这样的多维数组:
数组([收件箱] =>大批([垃圾] =>大批()[发送] =>大批()[草稿] =>大批()[测试] =>大批([子文件夹] =>大批([测试 2] =>大批()))))
解决方案
试试这个.
'收件箱.垃圾',1 =>'INBOX.Sent',2 =>'收件箱.草稿',3 =>'INBOX.Test.sub 文件夹',4 =>'INBOX.Test.sub 文件夹.test 2',);$输出=数组();foreach($test 作为 $element){assignArrayByPath($output, $element);}//print_r($output);调试($ 输出);函数assignArrayByPath(&$arr, $path) {$keys = expand('.', $path);而 ($key = array_shift($keys)) {$arr = &$arr[$key];}}功能调试($ arr){echo "";打印_r($arr);echo "</pre>";}
I have the following array:
Array
(
[0] => INBOX.Trash
[1] => INBOX.Sent
[2] => INBOX.Drafts
[3] => INBOX.Test.sub folder
[4] => INBOX.Test.sub folder.test 2
)
How can I convert this array to a multidimensional array like this:
Array
(
[Inbox] => Array
(
[Trash] => Array
(
)
[Sent] => Array
(
)
[Drafts] => Array
(
)
[Test] => Array
(
[sub folder] => Array
(
[test 2] => Array
(
)
)
)
)
)
解决方案
Try this.
<?php
$test = Array
(
0 => 'INBOX.Trash',
1 => 'INBOX.Sent',
2 => 'INBOX.Drafts',
3 => 'INBOX.Test.sub folder',
4 => 'INBOX.Test.sub folder.test 2',
);
$output = array();
foreach($test as $element){
assignArrayByPath($output, $element);
}
//print_r($output);
debug($output);
function assignArrayByPath(&$arr, $path) {
$keys = explode('.', $path);
while ($key = array_shift($keys)) {
$arr = &$arr[$key];
}
}
function debug($arr){
echo "<pre>";
print_r($arr);
echo "</pre>";
}
这篇关于将字符串数组(每个字符串都有点分隔值)转换为多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文