Heim > Backend-Entwicklung > PHP-Tutorial > PHP循环如何一个不循环 其他都循环?

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

WBOY
Freigeben: 2016-06-06 20:21:43
Original
1195 Leute haben es durchsucht

打印出来的数组:

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

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

)</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>第一章  1雅典娜的圣斗士
第一章  2 燃烧吧。。。</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>第一章  1雅典娜的圣斗士
        2 燃烧吧。。。</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>Array
(
    [0] => Array
        (
            [name] => 第一章
                    [0] => Array(
                       [cname] => 1 雅典娜的圣斗士
                    )
                    [1] => Array(
                       [cname] => 2 燃烧吧
                    )
        )

)</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

打印出来的数组:

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

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

)</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>第一章  1雅典娜的圣斗士
第一章  2 燃烧吧。。。</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

<code>第一章  1雅典娜的圣斗士
        2 燃烧吧。。。</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>Array
(
    [0] => Array
        (
            [name] => 第一章
                    [0] => Array(
                       [cname] => 1 雅典娜的圣斗士
                    )
                    [1] => Array(
                       [cname] => 2 燃烧吧
                    )
        )

)</code>
Nach dem Login kopieren
Nach dem Login kopieren

<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>
Nach dem Login kopieren

output:

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

    [第二章] => Array
        (
            [0] => 1 燃烧吧
            [1] => 2 小宇宙
        )
)</code>
Nach dem Login kopieren

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

<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

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

提供个思路,记录上一次的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>
Nach dem Login kopieren

由于题目改过了:
新的:

<code>foreach (node in chaList)
{
    print(name);
    foreach (sec in secList)
    {
        print(cname);
    }
}</code>
Nach dem Login kopieren
Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage