PHP循环如何一个不循环 其他都循环?

打印出来的数组:

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 燃烧吧
                    )
        )

)
阅读 3.2k
2 个回答
<?php

$a = [
    ['name' => '第一章', '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 小宇宙
        )
)

修改为完全符合题主输出的答案

<?php

$a = [
    ['name' => '第一章', '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 小宇宙
                )
        )
)

燃烧吧应该是雅典娜圣斗士的子类?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题