php递归遍历多维数组,合并重复值并记录重复次数
header('Content-type: text/html; charset=utf-8');//以下是原始数组$array = array( 0=>array( 0=>array( 'text' => '体育', 'children' => array( 0=>array( 'text' => '篮球', 'grade' => '1' ), 1=>array( 'text' => '足球', 'grade' => '3' ) ) ), 1=>array( 'text' => '音乐', 'children' => array( 0=>array( 'text' => '唱歌', 'children' => array( 0=>array( 'text' => '儿歌三百首', 'grade' => '1' ) ) ), 1=>array( 'text' => '跳舞', 'grade' => '3' ) ) ) ), 1=>array( 0=>array( 'text' => '体育', 'children' => array( 0=>array( 'text' => '篮球', 'grade' => '2' ), 1=>array( 'text' => '排球', 'grade' => '5' ) ) ), 1=>array( 'text' => '音乐', 'children' => array( 0=>array( 'text' => '唱歌', 'children' => array( 0=>array( 'text' => '儿歌三百首', 'grade' => '4' ) ) ) ) ) ),);//要求:递归遍历原始多维数组,将重复键值合并并累加grade值,以及记录重复次数。如:体育->篮球,经过处理后grade值为1+2=3,重复个数则为2(注:多维数组层级不定)//以下是想要的到的结果$newarray = array( 0=>array( 0=>array( 'text' => '体育', 'children' => array( 0=>array( 'text' => '篮球', 'grade' => '3', 'count' => '2' ), 1=>array( 'text' => '足球', 'grade' => '3', 'count' => '1' ), 2=>array( 'text' => '排球', 'grade' => '5', 'count' => '1' ) ) ), 1=>array( 'text' => '音乐', 'children' => array( 0=>array( 'text' => '唱歌', 'children' => array( 0=>array( 'text' => '儿歌三百首', 'grade' => '5', 'count' => '2' ) ) ), 1=>array( 'text' => '跳舞', 'grade' => '3', 'count' => '1' ) ) ) ));
回复讨论(解决方案)
貌似有性,等高手解决了,学习学习
不需要递归吧。双重循环完全可以搞定。
这就是基础了
不需要递归吧。双重循环完全可以搞定。
但数组的层级是不一定的,实际上有多大5至6级
不需要递归吧。双重循环完全可以搞定。
但数组的层级是不一定的,实际上有多大5至6级
但数组的层级是不一定的,实际上有多达5至6级
你的数据是从哪里来的?
正着做很简单,像你这样反着做是有些难度的
别着急,有空帮你看看
昨天晚上研究这个题目6个小时,最后抱着参考手册找各种数组函数,结果还是没做出来。
你的数据是从哪里来的?
正着做很简单,像你这样反着做是有些难度的
别着急,有空帮你看看
多谢版主
昨天晚上研究这个题目6个小时,最后抱着参考手册找各种数组函数,结果还是没做出来。
不才,我花了2天时间也还是没能找着出路
给个思路:先降维
function untree($ar, $key='children', $deep=0, $paren='') { $res = array(); foreach((array)$ar as $v) { if(is_numeric(key($v))) { $res = array_merge($res, untree($v, $key, $deep+1, $paren)); continue; } $v['deep'] = $deep; $v['paren'] = $paren; if(isset($v[$key])) { $t = $v[$key]; $pa = $v['text']; unset($v[$key]); } $res[] = $v; if(! empty($t)) $res = array_merge($res, untree($t, $key, $deep+1, $pa)); } return $res;}
得
Array
(
[0] => Array
(
[text] => 体育
[deep] => 1
[paren] =>
)
[1] => Array
(
[text] => 篮球
[grade] => 1
[deep] => 2
[paren] => 体育
)
[2] => Array
(
[text] => 足球
[grade] => 3
[deep] => 2
[paren] => 体育
)
[3] => Array
(
[text] => 音乐
[deep] => 1
[paren] =>
)
[4] => Array
(
[text] => 唱歌
[deep] => 2
[paren] => 音乐
)
[5] => Array
(
[text] => 儿歌三百首
[grade] => 1
[deep] => 3
[paren] => 唱歌
)
[6] => Array
(
[text] => 跳舞
[grade] => 3
[deep] => 2
[paren] => 音乐
)
[7] => Array
(
[text] => 儿歌三百首
[grade] => 1
[deep] => 3
[paren] => 唱歌
)
[8] => Array
(
[text] => 体育
[deep] => 1
[paren] =>
)
[9] => Array
(
[text] => 篮球
[grade] => 2
[deep] => 2
[paren] => 体育
)
[10] => Array
(
[text] => 排球
[grade] => 5
[deep] => 2
[paren] => 体育
)
[11] => Array
(
[text] => 音乐
[deep] => 1
[paren] =>
)
[12] => Array
(
[text] => 唱歌
[deep] => 2
[paren] => 音乐
)
[13] => Array
(
[text] => 儿歌三百首
[grade] => 4
[deep] => 3
[paren] => 唱歌
)
)
你的数据是从哪里来的?
正着做很简单,像你这样反着做是有些难度的
别着急,有空帮你看看
数据是通过另一个封装函数返回的(我不能修改封装函数)
给个思路:先降维
function untree($ar, $key='children', $deep=0, $paren='') { $res = array(); foreach((array)$ar as $v) { if(is_numeric(key($v))) { $res = array_merge($res, untree($v, $key, $deep+1, $paren)); continue; } $v['deep'] = $deep; $v['paren'] = $paren; if(isset($v[$key])) { $t = $v[$key]; $pa = $v['text']; unset($v[$key]); } $res[] = $v; if(! empty($t)) $res = array_merge($res, untree($t, $key, $deep+1, $pa)); } return $res;}
得
Array
(
[0] => Array
(
[text] => 体育
[deep] => 1
[paren] =>
)
[1] => Array
(
[text] => 篮球
[grade] => 1
[deep] => 2
[paren] => 体育
)
[2] => Array
(
[text] => 足球
[grade] => 3
[deep] => 2
[paren] => 体育
)
[3] => Array
(
[text] => 音乐
[deep] => 1
[paren] =>
)
[4] => Array
(
[text] => 唱歌
[deep] => 2
[paren] => 音乐
)
[5] => Array
(
[text] => 儿歌三百首
[grade] => 1
[deep] => 3
[paren] => 唱歌
)
[6] => Array
(
[text] => 跳舞
[grade] => 3
[deep] => 2
[paren] => 音乐
)
[7] => Array
(
[text] => 儿歌三百首
[grade] => 1
[deep] => 3
[paren] => 唱歌
)
[8] => Array
(
[text] => 体育
[deep] => 1
[paren] =>
)
[9] => Array
(
[text] => 篮球
[grade] => 2
[deep] => 2
[paren] => 体育
)
[10] => Array
(
[text] => 排球
[grade] => 5
[deep] => 2
[paren] => 体育
)
[11] => Array
(
[text] => 音乐
[deep] => 1
[paren] =>
)
[12] => Array
(
[text] => 唱歌
[deep] => 2
[paren] => 音乐
)
[13] => Array
(
[text] => 儿歌三百首
[grade] => 4
[deep] => 3
[paren] => 唱歌
)
)
其实原始数组有记录id ,pid值的
那你就把数据特完整了
$array=array( '0' => array( '0' => array( 'id' => 87073074, 'pid' => 0, 'text' => '白田最新??', 'children' => array( '0' => array( 'id' => 67852256, 'pid' => 87073074, 'text' => '??知?', 'children' => array( '0' => array( 'id' => 44740741, 'pid' => 67852256, 'text' => '?能?健康', 'children' => array( '0' => array( 'id' => 66256396, 'pid' => 44740741, 'text' => '小肌肉', 'children' => array( '0' => array( 'id' => 71852852, 'pid' => 66256396, 'text' => '掌握?手??能力', 'children' => array( '0' => array( 'id' => 84741741, 'text' => '能摺?包', 'grade' => 1 ) ) ) ) ) ) ), '1' => array( 'id' => 32518528, 'pid' => 67852256, 'text' => '?文', 'children' => array( '0' => array( 'id' => 18185185, 'pid' => 32518528, 'text' => '?', 'children' => array( '0' => array( 'id' => 35256896, 'pid' => 18185185, 'text' => '能理解故事?容要?', 'children' => array( '0' => array( 'id' => 69295296, 'text' => '能理解故事?容要?', 'grade' => 1 ) ) ), '1' => array( 'id' => 54740741, 'pid' => 18185185, 'text' => '能\'?\',指示?行??和活?', 'children' => array( '0' => array( 'id' => 93629639, 'text' => '能\'?\',指示?行活?和??', 'grade' => 1 ) ) ) ) ) ) ) ) ) ) ) ), '1' => array( '0' => array( 'id' => 87073074, 'pid' => 0, 'text' => '白田最新??', 'children' => array( '0' => array( 'id' => 67852256, 'pid' => 87073074, 'text' => '??知?', 'children' => array( '0' => array( 'id' => 44740741, 'pid' => 67852256, 'text' => '?能?健康', 'children' => array( '0' => array( 'id' => 66256396, 'pid' => 44740741, 'text' => '小肌肉', 'children' => array( '0' => array( 'id' => 71852852, 'pid' => 66256396, 'text' => '掌握?手??能力', 'children' => array( '0' => array(

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.
