嵌套陣列我有這種格式文件到PHP
-Main
--Sub
--Next sub
---Sub Sub
--Last sub
-Next Main
-Last Main
--Sub
--Next sub
一個txt文件,我需要將其轉換爲嵌套數組
Array(
"Main" => array("Sub","Next sub" => array("Sub Sub")),
);
是否有任何遞歸函數來做到這一點在PHP? 非常感謝
嵌套陣列我有這種格式文件到PHP
-Main
--Sub
--Next sub
---Sub Sub
--Last sub
-Next Main
-Last Main
--Sub
--Next sub
一個txt文件,我需要將其轉換爲嵌套數組
Array(
"Main" => array("Sub","Next sub" => array("Sub Sub")),
);
是否有任何遞歸函數來做到這一點在PHP? 非常感謝
也許不是很漂亮,但代碼的作品。
$str = "
-Main
--Sub level 2
--Next sub level 2
---Sub Sub1 level 3
---Sub Sub2 level 3
--Last sub level 2
-Next Main
-Last Main
--Sub level 2
--Next sub level 2
--Next sub level 2
--Next sub level 2
---Next sub1 level 3
---Next sub2 level 3
---Next sub3 level 3
--Next sub level 2
-Next sub
--Next sub level 2
--Next sub level 2
";
$a = explode("\n", $str);
$last_count = 1;
$level = array();
$level1 = array();
$level2 = array();
$level3 = array();
$max_level = 0;
$min_level = 1;
foreach($a as $key => $val)
{
$count = substr_count($val, '-');
if ($max_level < $count)
{
$max_level = $count;
}
}
foreach($a as $key => $val)
{
$count = substr_count($val, '-');
$val = trim($val, '-');
if ($count > 0)
{
if ($count == $min_level)
{
$level1[] = $level2;
if ($last_count == 2)
{
$level1[] = $val;
}
$level1[] = $level2;
$level2 = array();
$level1[] = $val;
}
elseif ($count == ($max_level - 1) && ($last_count >= $min_level))
{
if ($last_count == $max_level)
{
array_pop($level2);
$level2[$name2] = $level3;
$level3 = array();
}
$level2[] = $val;
$name2 = $val;
}
elseif ($count == $max_level && ($last_count >= ($min_level + 1)))
{
$level3[] = $val;
}
$last_count = $count;
}
}
$level1[] = $level2;
$level1 = array_filter($level1);
$arr = array();
foreach($level1 as $key)
{
$arr[$var] = is_array($key) ? $key : '';
$var = $key;
}
$arr = array_filter($arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
結果:
Array
(
[Main] => Array
(
[0] => Sub level 2
[Next sub level 2] => Array
(
[0] => Sub Sub1 level 3
[1] => Sub Sub2 level 3
)
[1] => Last sub level 2
)
[Last Main] => Array
(
[0] => Sub level 2
[1] => Next sub level 2
[2] => Next sub level 2
[Next sub level 2 ] => Array
(
[0] => Next sub1 level 3
[1] => Next sub2 level 3
[2] => Next sub3 level 3
)
[3] => Next sub level 2
)
[Next sub] => Array
(
[0] => Next sub level 2
[1] => Next sub level 2
)
)
我想簡單地爆炸文件內容將做的工作,以便讓你開始:
$file = fopen('path/to/file.txt', "r");
$array = explode('/r',$file);
這是基本的,但在這裏,你可以將其處理成嵌套數組。
你可能想仔細檢查[fopen()]返回的內容(http://us3.php.net/manual/en/ function.fopen.php) –
是的,這不是問題。但接下來呢? – user3347718
的語言是什麼? – Leo
我編輯了帖子..在PHP – user3347718
這將幫助你:-)謝謝 – Leo