<?php
/*
* 将A,B两个多维数组合并为C数组
* A,B数组均为关联数组
* 若key在A,B中均存在,追加合并
*/
function format($string)
{
$arr = explode("/", $string);
$result = null;
// 弹出最后一个元素
for ($i = count($arr) - 1; $i >= 0; $i--) {
if ($result === null) {
$result = $arr[$i];
} else {
$result = array($arr[$i] => $result);
}
}
return ($result);
}
function my_merge(&$a, $b)
{
foreach ($a as $key => &$val) {
if (is_array($val) && array_key_exists($key, $b) && is_array($b[$key])) {
my_merge($val, $b[$key]);
$val = $val + $b[$key];
} else if (is_array($val) || (array_key_exists($key, $b) && is_array($b[$key]))) {
if (isset($b[$key]) && is_array($b[$key])) {
foreach ($b[$key] as $key2 => $value2) {
$b[$key][$val] = array();
}
$val = is_array($val) ? $val : $b[$key];
}
}
}
$a = $a + $b;
return $a;
}
function format_data($array)
{
$i = $j = 0;
$tempArray = array();
if (!is_array($array)) {
if (!empty($array)) {
$tempArray[$j]['name'] = $array;
}
return $tempArray;
}
foreach ($array as $key => $value) {
if (is_array($value) && !empty($value)) {
// print_r($value);
unset($value['']);
$tempArray[$j]['name'] = $key;
$tempArray[$j]['children'] = format_data($value);
} else {
if (!empty($value)) {
$tempArray[$j]['name'] = $value;
} else {
$tempArray[$j]['name'] = $key;
}
}
$j++;
}
return $tempArray;
}
$strings = array(
'客户单位3/单位1/kek222/',
'客户单位3/单位2/kek/',
'11111/客户单位1/客户单位4/asd/客户单位2/',
);
$result = array();
sort($strings);
foreach ($strings as $string) {
if (empty($result)) {
$result = format($string);
} else {
if (is_array($result) && is_array(format($string))) {
$result = my_merge($result, format($string));
}
}
}
$result = format_data($result);
print_r($result);
die;