php递归遍历多维数组,合并重复值并记录重复次数
<br />header('Content-type: text/html; charset=utf-8');<br />//以下是原始数组<br />$array = array(<br /> 0=>array(<br /> 0=>array(<br /> 'text' => '体育',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '篮球',<br /> 'grade' => '1'<br /> ),<br /> 1=>array(<br /> 'text' => '足球',<br /> 'grade' => '3'<br /> )<br /> )<br /> ),<br /> 1=>array(<br /> 'text' => '音乐',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '唱歌',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '儿歌三百首',<br /> 'grade' => '1'<br /> )<br /> )<br /> ),<br /> 1=>array(<br /> 'text' => '跳舞',<br /> 'grade' => '3'<br /> )<br /> )<br /> )<br /> ),<br /> 1=>array(<br /> 0=>array(<br /> 'text' => '体育',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '篮球',<br /> 'grade' => '2'<br /> ),<br /> 1=>array(<br /> 'text' => '排球',<br /> 'grade' => '5'<br /> )<br /> )<br /> ),<br /> 1=>array(<br /> 'text' => '音乐',<br /> 'children' => array(<br /> 0=>array(<br /> 't<strong>*本文来源gaodai#ma#com搞@代~码^网+</strong><strong>搞代gaodaima码</strong>ext' => '唱歌',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '儿歌三百首',<br /> 'grade' => '4'<br /> )<br /> )<br /> )<br /> )<br /> )<br /> ),<br />);<br /><br />//要求:递归遍历原始多维数组,将重复键值合并并累加grade值,以及记录重复次数。如:体育->篮球,经过处理后grade值为1+2=3,重复个数则为2(注:多维数组层级不定)<br /><br />//以下是想要的到的结果<br />$newarray = array(<br /> 0=>array(<br /> 0=>array(<br /> 'text' => '体育',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '篮球',<br /> 'grade' => '3',<br /> 'count' => '2'<br /> ),<br /> 1=>array(<br /> 'text' => '足球',<br /> 'grade' => '3',<br /> 'count' => '1'<br /> ),<br /> 2=>array(<br /> 'text' => '排球',<br /> 'grade' => '5',<br /> 'count' => '1'<br /> )<br /> )<br /> ),<br /> 1=>array(<br /> 'text' => '音乐',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '唱歌',<br /> 'children' => array(<br /> 0=>array(<br /> 'text' => '儿歌三百首',<br /> 'grade' => '5',<br /> 'count' => '2'<br /> )<br /> )<br /> ),<br /> 1=>array(<br /> 'text' => '跳舞',<br /> 'grade' => '3',<br /> 'count' => '1'<br /> )<br /> )<br /> )<br /> )<br />);<br />
——解决方案——————–
这个不会!帮你顶起来
——解决方案——————–
昨天晚上研究这个题目6个小时,最后抱着参考手册找各种数组函数,结果还是没做出来。
——解决方案——————–
降维还是必须的
然后是修改函数还是再写个函数都可以的
function untree($ar, $pid=0) {<br /> $res = array();<br /> foreach((array)$ar as $v) {<br /> if(is_numeric(key($v))) {<br /> $res = array_merge($res, untree($v));<br /> continue;<br /> }<br /> if(! isset($v['pid'])) $v['pid'] = $pid;<br /> if(isset($v['children'])) {<br /> $t = $v['children'];<br /> unset($v['children']);<br /> }<br /> $res[] = $v;<br /> if(! empty($t)) $res = array_merge($res, untree($t, $v['id']));<br /> }<br /> return $res;<br />}
Array
(
[0] => Array
(
[id] => 87073074
[pid] => 0
[text] => 白田最新範疇
)
[1] => Array
(
[id] => 67852256
[pid] => 87073074
[text] => 範疇知識
)
[2] => Array
(
[id] => 44740741
[pid] => 67852256
[text] => 體能與健康
)
[3] => Array
(
[id] => 66256396