• <day4>聚气成阵——循环与数组的“阵法”之术

    修炼心法:循环与数组的奥秘

    在修真世界中,阵法是聚集天地灵气、施展强大法术的基础。而在 PHP 修炼中,循环数组正是构建复杂逻辑和处理批量数据的"阵法"。

    一、循环之术:重复施展法术

    1. while 循环:条件驱动的阵法

    // while 循环:当条件满足时,持续施展法术
    $qi = 100; // 气值
    $round = 1; // 回合数
    
    while ($qi > 0) {
        echo "第 $round 回合:施展法术,消耗 10 点气值\n";
        $qi -= 10;
        $round++;
    }
    

    修真比喻:就像修炼者在打坐时,只要体内还有真气,就持续运转功法。

    2. do...while 循环:先行动后判断

    // do...while 循环:至少执行一次,再判断是否继续
    $attempt = 0;
    
    do {
        $attempt++;
        echo "第 $attempt 次尝试突破瓶颈...\n";
        $success = mt_rand(1, 10) > 7; // 30% 成功率
    } while (!$success && $attempt < 5);
    

    修真比喻:就像突破境界时,无论成败都要先尝试一次,再决定是否继续。

    3. for 循环:精确控制的阵法

    // for 循环:精确控制循环次数
    $days = 30; // 修炼 30 天
    
    for ($day = 1; $day <= $days; $day++) {
        echo "第 $day 天:吐纳修炼,提升修为\n";
        
        // 每 7 天休息一天
        if ($day % 7 == 0) {
            echo "休息日:整理修炼心得\n";
        }
    }
    

    修真比喻:就像制定修炼计划,精确控制每天的修炼内容。

    4. foreach 循环:遍历法宝库

    // foreach 循环:遍历数组中的每个元素
    $artifacts = ["飞剑", "丹炉", "符箓", "阵盘"];
    
    foreach ($artifacts as $artifact) {
        echo "检查法宝:$artifact\n";
    }
    

    修真比喻:就像清点法宝库中的每一件法宝。

    二、数组之术:灵气的容器

    1. 索引数组:有序的灵气瓶

    // 索引数组:从 0 开始的数字索引
    $techniques = ["吐纳术", "炼丹术", "炼器术", "阵法术"];
    
    echo "第一个法术:$techniques[0]\n";
    echo "数组长度:" . count($techniques) . "\n";
    
    // 遍历索引数组
    for ($i = 0; $i < count($techniques); $i++) {
        echo "第 $i 个法术:$techniques[$i]\n";
    }
    

    修真比喻:就像一排有序的灵气瓶,每个瓶子都有固定的位置。

    2. 关联数组:标签化的灵气瓶

    // 关联数组:使用字符串作为键名
    $skills = [
        "火球术" => "消耗 20 点气值,造成 50 点伤害",
        "冰锥术" => "消耗 25 点气值,造成 60 点伤害并减速",
        "雷电术" => "消耗 30 点气值,造成 80 点伤害"
    ];
    
    // 访问关联数组
    echo "火球术说明:" . $skills["火球术"] . "\n";
    
    // 遍历关联数组
    foreach ($skills as $skill => $description) {
        echo "法术:$skill\n";
        echo "说明:$description\n";
        echo "---\n";
    }
    

    修真比喻:就像贴有标签的灵气瓶,通过标签可以快速找到对应的灵气。

    3. 多维数组:阵法的层次结构

    // 多维数组:数组中的数组
    $cultivation_plan = [
        "第一周" => [
            "Day 1" => "学习 PHP 基础语法",
            "Day 2" => "掌握变量与数据类型",
            "Day 3" => "理解运算符与流程控制"
        ],
        "第二周" => [
            "Day 8" => "深入函数应用",
            "Day 9" => "面向对象编程入门"
        ]
    ];
    
    // 访问多维数组
    echo "第一周 Day 1 的内容:" . $cultivation_plan["第一周"]["Day 1"] . "\n";
    
    // 遍历多维数组
    foreach ($cultivation_plan as $week => $days) {
        echo "$week:\n";
        foreach ($days as $day => $content) {
            echo "  $day:$content\n";
        }
    }
    

    修真比喻:就像阵法的层次结构,外层阵法包含内层阵法,层层嵌套。

    三、实战演练:修炼日志系统

    让我们结合循环和数组,创建一个简单的修炼日志系统:

    <?php
    // 修炼日志系统
    $practice_log = [
        "日期" => "2026-03-14",
        "修炼内容" => "循环与数组",
        "气值变化" => [
            "开始" => 100,
            "结束" => 85,
            "消耗" => 15
        ],
        "修炼心得" => [
            "循环就像重复施展法术,直到条件不满足",
            "数组就像法宝库,可以存储多个物品",
            "foreach 循环最适合遍历数组"
        ]
    ];
    
    // 显示修炼日志
    echo "=== 修炼日志 ===\n";
    echo "日期:" . $practice_log["日期"] . "\n";
    echo "修炼内容:" . $practice_log["修炼内容"] . "\n";
    echo "气值变化:\n";
    foreach ($practice_log["气值变化"] as $key => $value) {
        echo "  $key:$value\n";
    }
    
    echo "修炼心得:\n";
    foreach ($practice_log["修炼心得"] as $index => $心得) {
        echo "  " . ($index + 1) . ". $心得\n";
    }
    
    // 使用循环生成修炼进度条
    echo "\n修炼进度:\n";
    $progress = 85; // 当前进度百分比
    for ($i = 0; $i < 20; $i++) {
        if ($i < $progress / 5) {
            echo "█";
        } else {
            echo "░";
        }
    }
    echo " $progress%\n";
    ?>
    

    四、修炼要点总结

    1. 循环的选择

      • while:条件驱动,适合不确定次数的循环
      • do...while:至少执行一次,适合需要先尝试的场景
      • for:精确控制,适合已知次数的循环
      • foreach:遍历数组,最简洁的方式
    2. 数组的使用

      • 索引数组:适合有序数据,通过数字索引访问
      • 关联数组:适合键值对数据,通过字符串键名访问
      • 多维数组:适合层次结构数据,嵌套使用
    3. 实战技巧

      • 使用 count() 获取数组长度
      • 使用 foreach 遍历数组时,同时获取键名和值
      • 结合条件语句,在循环中实现复杂逻辑

    五、今日修炼任务

    1. 创建一个包含 7 天修炼计划的索引数组
    2. 使用 foreach 循环遍历并显示每天的修炼内容
    3. 创建一个关联数组,存储你的法术库(法术名称 => 法术说明)
    4. 使用 for 循环生成一个简单的进度条,显示修炼进度

    记住:循环与数组是 PHP 修炼中的基础阵法,熟练掌握它们,你就能构建更复杂的修炼系统!