时间:2021-07-01 10:21:17 帮助过:18人阅读
Array
(
[0] => Array
(
[name] => 第一章
[cname] => 1 雅典娜的圣斗士
)
[1] => Array
(
[name] => 第一章
[cname] => 2 燃烧吧。。。
)
)
foreach($k as $v){} 输出的时候,发现第一章也跟着循环
第一章 1雅典娜的圣斗士
第一章 2 燃烧吧。。。
如何做到 第一章这个字段只循环1次呢?
第一章 1雅典娜的圣斗士
2 燃烧吧。。。
Array
(
[0] => Array
(
[name] => 第一章
[0] => Array(
[cname] => 1 雅典娜的圣斗士
)
[1] => Array(
[cname] => 2 燃烧吧
)
)
)
打印出来的数组:
Array
(
[0] => Array
(
[name] => 第一章
[cname] => 1 雅典娜的圣斗士
)
[1] => Array
(
[name] => 第一章
[cname] => 2 燃烧吧。。。
)
)
foreach($k as $v){} 输出的时候,发现第一章也跟着循环
第一章 1雅典娜的圣斗士
第一章 2 燃烧吧。。。
如何做到 第一章这个字段只循环1次呢?
第一章 1雅典娜的圣斗士
2 燃烧吧。。。
Array
(
[0] => Array
(
[name] => 第一章
[0] => Array(
[cname] => 1 雅典娜的圣斗士
)
[1] => Array(
[cname] => 2 燃烧吧
)
)
)
'第一章', 'cname' => '1 雅典娜的圣斗士'],
['name' => '第一章', 'cname' => '2 燃烧吧'],
['name' => '第二章', 'cname' => '1 燃烧吧'],
['name' => '第二章', 'cname' => '2 小宇宙'],
];
$result = [];
foreach ($a as $chap) {
$name = $chap['name'];
if (!isset($result[$name])) {
$result[$name] = [];
}
$result[$name][] = $chap['cname'];
}
print_r($result);
output:
Array
(
[第一章] => Array
(
[0] => 1 雅典娜的圣斗士
[1] => 2 燃烧吧
)
[第二章] => Array
(
[0] => 1 燃烧吧
[1] => 2 小宇宙
)
)
修改为完全符合题主输出的答案
'第一章', 'cname' => '1 雅典娜的圣斗士'],
['name' => '第一章', 'cname' => '2 燃烧吧'],
['name' => '第二章', 'cname' => '1 燃烧吧'],
['name' => '第二章', 'cname' => '2 小宇宙'],
];
$result = [];
$nameMap = [];
foreach ($a as $chap) {
$name = $chap['name'];
if (!isset($nameMap[$name])) {
$id = count($nameMap);
$nameMap[$name] = $id;
} else {
$id = $nameMap[$name];
}
if (!isset($result[$id])) {
$result[$id] = [];
$result[$id]['name'] = $name;
}
$result[$id][] = ['cname' => $chap['cname']];
}
print_r($result);
output
Array
(
[0] => Array
(
[name] => 第一章
[0] => Array
(
[cname] => 1 雅典娜的圣斗士
)
[1] => Array
(
[cname] => 2 燃烧吧
)
)
[1] => Array
(
[name] => 第二章
[0] => Array
(
[cname] => 1 燃烧吧
)
[1] => Array
(
[cname] => 2 小宇宙
)
)
)
燃烧吧应该是雅典娜圣斗士的子类?
我理解的意思是:一个结构中存放章节序号和章节名,遍历整个列表,相同章节序号只输出一次。
提供个思路,记录上一次的name,遍历数组元素,每次拿出一个元素的时候比较该元素的name字段和上一次的name是否一样,一样不输出,否则输出并记录,以下是不算标准伪代码的伪代码:
string lastName = "";
foreach(node in list)
{
if (lastName != node.name)
{
print(node.name);
lastName = node.name
}
else
{}
print(node.cname);
}
由于题目改过了:
新的:
foreach (node in chaList)
{
print(name);
foreach (sec in secList)
{
print(cname);
}
}