PHP中如何自动递增变量名并关联到关联数组?
动态创建$t0-$t160变量并关联$lang数组的正确实现
嘿,你的思路方向其实是对的!动态变量的写法本身没问题,可能是细节或者执行顺序没处理好,我来给你梳理下完整的正确实现方式:
一、核心原理:PHP可变变量语法
你尝试的$t.$i++只是字符串拼接,没法生成变量名。PHP里创建动态变量必须用可变变量语法:${"t".$x},它会把字符串"t".$x解析成对应的变量名(比如$t0、$t1),这才是正确的打开方式。
二、完整实现步骤&代码
1. 读取翻译文件并创建动态变量
先处理翻译文件的读取,建议加上空行跳过和存在性检查,避免索引错误:
$translationfile = 'data/translations.txt'; // 读取文件,忽略换行符+跳过空行,更稳健 $lines_translationfile = file($translationfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 循环创建$t0到$t160变量,同时处理文件行数不足的情况 for ($x = 0; $x <= 160; $x++) { // 如果对应行存在就赋值,否则设为空字符串 ${"t".$x} = isset($lines_translationfile[$x]) ? $lines_translationfile[$x] : ''; }
2. 关联$lang数组(lang.php内容)
确保在动态变量创建完成后,再引入lang.php,否则里面的$t0等变量会未定义:
// lang.php 文件内容 $lang = array( 'All Articles' => $t0, 'Main Articles' => $t1, // ... 按顺序添加到$t160对应的键值对 );
3. 最终调用流程
你的调用顺序是对的,完整流程如下:
// 第一步:创建动态变量 $translationfile = 'data/translations.txt'; $lines_translationfile = file($translationfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); for ($x = 0; $x <= 160; $x++) { ${"t".$x} = isset($lines_translationfile[$x]) ? $lines_translationfile[$x] : ''; } // 第二步:引入$lang数组文件 include 'includes/lang.php'; // 第三步:正常调用翻译内容 echo $lang['All Articles'];
三、更优雅的替代方案(推荐)
其实没必要创建一堆$t0-$t160的变量,直接把翻译内容和$lang的键映射起来更简洁,还能避免全局变量污染:
$translationfile = 'data/translations.txt'; $lines_translationfile = file($translationfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 先定义$lang的所有键,顺序和翻译文件的行严格对应 $langKeys = [ 'All Articles', 'Main Articles', // ... 依次添加所有161个键 ]; // 直接生成$lang数组 $lang = []; foreach ($langKeys as $index => $key) { $lang[$key] = isset($lines_translationfile[$index]) ? $lines_translationfile[$index] : ''; } // 直接使用即可 echo $lang['Main Articles'];
注意事项
- 执行顺序不能乱:必须先完成动态变量的赋值,再引入
lang.php - 文件行数检查:确保翻译文件至少有161行(对应$t0到$t160),或者用
isset兜底避免报错 - 可变变量语法:记住用
${"t".$x},而不是$t.$x(后者只是字符串拼接)
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

