You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何将while循环获取的结果存入全局变量并在其他函数中调用

问题原因
  • 代码中仅调用了OutputNames(),从未执行ReadNames(),读取姓名的逻辑全程没有运行
  • PHP 函数内的变量默认是局部作用域,未显式声明为全局变量时,变量仅在当前函数内部生效,其他函数无法访问
  • 当前while循环每次都会覆盖$first和$last的值,最终只会保留文件最后一行的姓名,无法存储所有姓名数据

符合需求的修改方案(使用全局变量存储)

完全按照你要求的「全局变量存储、所有姓名分两个键存放、可跨函数访问」的逻辑实现:

<?php
// 声明全局存储数组,分first、last两个键存储所有名和姓
$globalNames = [
    'first' => [],
    'last' => []
];

// 先执行读文件逻辑加载数据,再执行输出
ReadNames();
OutputNames();

function ReadNames()
{
    // 声明使用全局变量
    global $globalNames;
    $myFile = new SplFileObject("all/names.txt");

    while (!$myFile->eof()) {
        $row = str_getcsv($myFile->fgets());
        // 过滤空行避免下标报错
        if (empty($row[0]) || empty($row[1])) continue;
        // 把当前行数据追加到全局数组对应分类下
        $globalNames['first'][] = $row[0];
        $globalNames['last'][] = $row[1];
    }
}

function OutputNames()
{
    global $globalNames;
    // 遍历输出所有姓名,可按需调整输出格式
    foreach ($globalNames['first'] as $index => $firstName) {
        $lastName = $globalNames['last'][$index];
        echo $firstName . " " . $lastName . "<br>";
    }
    
    // 如果需要直接输出两个键的全量数据,可使用下方语句
    // print_r($globalNames);
}
?>

更规范的优化方案(避免全局变量污染)

全局变量容易引发意外的变量覆盖问题,更推荐用函数返回值传递数据,无需全局声明也能实现需求:

<?php
function ReadNames()
{
    $names = [
        'first' => [],
        'last' => []
    ];
    $myFile = new SplFileObject("all/names.txt");

    while (!$myFile->eof()) {
        $row = str_getcsv($myFile->fgets());
        if (empty($row[0]) || empty($row[1])) continue;
        $names['first'][] = $row[0];
        $names['last'][] = $row[1];
    }
    return $names;
}

function OutputNames($names)
{
    foreach ($names['first'] as $index => $firstName) {
        $lastName = $names['last'][$index];
        echo $firstName . " " . $lastName . "<br>";
    }
}

// 调用逻辑
$allNames = ReadNames();
OutputNames($allNames);
?>

内容的提问来源于stack exchange,提问作者Ahmed Mohammed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:18:00