首页 > 后端开发 > php教程 > PHP循环如何一个不循环 其他都循环?

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

WBOY
发布: 2016-06-06 20:21:43
原创
1200 人浏览过

打印出来的数组:

<code>Array
(
    [0] => Array
        (
            [name] => 第一章
            [cname] => 1 雅典娜的圣斗士
        )

    [1] => Array
        (
            [name] => 第一章
            [cname] => 2 燃烧吧。。。
        )

)</code>
登录后复制
登录后复制

foreach($k as $v){} 输出的时候,发现第一章也跟着循环

<code>第一章  1雅典娜的圣斗士
第一章  2 燃烧吧。。。</code>
登录后复制
登录后复制

如何做到 第一章这个字段只循环1次呢?

<code>第一章  1雅典娜的圣斗士
        2 燃烧吧。。。</code>
登录后复制
登录后复制
<code>Array
(
    [0] => Array
        (
            [name] => 第一章
                    [0] => Array(
                       [cname] => 1 雅典娜的圣斗士
                    )
                    [1] => Array(
                       [cname] => 2 燃烧吧
                    )
        )

)</code>
登录后复制
登录后复制

回复内容:

打印出来的数组:

<code>Array
(
    [0] => Array
        (
            [name] => 第一章
            [cname] => 1 雅典娜的圣斗士
        )

    [1] => Array
        (
            [name] => 第一章
            [cname] => 2 燃烧吧。。。
        )

)</code>
登录后复制
登录后复制

foreach($k as $v){} 输出的时候,发现第一章也跟着循环

<code>第一章  1雅典娜的圣斗士
第一章  2 燃烧吧。。。</code>
登录后复制
登录后复制

如何做到 第一章这个字段只循环1次呢?

<code>第一章  1雅典娜的圣斗士
        2 燃烧吧。。。</code>
登录后复制
登录后复制
<code>Array
(
    [0] => Array
        (
            [name] => 第一章
                    [0] => Array(
                       [cname] => 1 雅典娜的圣斗士
                    )
                    [1] => Array(
                       [cname] => 2 燃烧吧
                    )
        )

)</code>
登录后复制
登录后复制

<code class="php"><?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);</code>
登录后复制

output:

<code>Array
(
    [第一章] => Array
        (
            [0] => 1 雅典娜的圣斗士
            [1] => 2 燃烧吧
        )

    [第二章] => Array
        (
            [0] => 1 燃烧吧
            [1] => 2 小宇宙
        )
)</code>
登录后复制

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

<code><?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);</code>
登录后复制

output

<code>Array
(
    [0] => Array
        (
            [name] => 第一章
            [0] => Array
                (
                    [cname] => 1 雅典娜的圣斗士
                )

            [1] => Array
                (
                    [cname] => 2 燃烧吧
                )
        )
    [1] => Array
        (
            [name] => 第二章
            [0] => Array
                (
                    [cname] => 1 燃烧吧
                )

            [1] => Array
                (
                    [cname] => 2 小宇宙
                )
        )
)</code>
登录后复制

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

我理解的意思是:一个结构中存放章节序号和章节名,遍历整个列表,相同章节序号只输出一次。

提供个思路,记录上一次的name,遍历数组元素,每次拿出一个元素的时候比较该元素的name字段和上一次的name是否一样,一样不输出,否则输出并记录,以下是不算标准伪代码的伪代码:

<code>string lastName = "";
foreach(node in list)
{
    if (lastName != node.name)
    {
        print(node.name);
        lastName = node.name
    }
    else
    {}
    
    print(node.cname);
}</code>
登录后复制

由于题目改过了:
新的:

<code>foreach (node in chaList)
{
    print(name);
    foreach (sec in secList)
    {
        print(cname);
    }
}</code>
登录后复制
相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板