PHP:按预先确定的 CSV 顺序格式化变量...但是为什么此代码作为函数会中断?
PHP: Format variable by predetermined CSV order... but Why this code as function breaks?
此代码完美运行...但为什么我将其用作 PHP 函数时出错?
$name = '1 value';
$age = '2 value';
$date = '3 value';
$string = "date, name, age"; //default CSV file Column order
会得到很好的结果:
date, name, age
date|name|age
3 value|1 value|2 value|
通过使用此代码:
echo $string.'<br/>';
echo implode("|", explode(", ", $string)).'<br/><br/>';
$line='';
foreach(explode(", ", $string) as $str) {
$line .= $$str.'|';
}
echo $line;
我编写这个函数:
<?php
function toImplode($string)
{
$line = '';
foreach (explode(", ", $string) as $str) {
$line .= $$str . '|';
}
return $line;
}
echo 'Variable to line formatted order is:<br/> ' . toImplode($string) . '<br/>';
但是我得到了这个错误:
> Notice: Undefined variable: name in on line 22
> Notice: Undefined variable: age in on line 22
> Notice: Undefined variable: date in on line 22
我不明白为什么。
通过调试器 运行,我相信我已经找到了问题所在 - 如果您所指的错误是 date
、name
的未定义变量错误和 age
,这是由于 scoping - 在 PHP 函数中,该函数内的代码无法查看或访问在该函数外部设置的变量,除非您将它们定义为 global
,或将它们作为参数传递给函数。
您可以通过在函数中使用 global
关键字来执行此操作 - 即,要使变量 $name
、$date
和 $age
可访问,您d 添加此行:global $name, $date, $age;
。在您的脚本上下文中,global $$str;
在技术上是有效的并且 运行 也是如此,尽管我不确定这是否是最佳实践。
如果您指的是 Array to string conversion
通知,这是由您的 echo explode(...)
行引起的 - explode()
returns 一个数组,无法转换回一个字符串。您可能想尝试 print_r() or var_dump() 而不是输出数组内容。
您可以使用 global
keyword with variable variables ($$
):
在函数体中添加以下行
global $$str;
所以完整代码变为:
<?php
$name = '1 value';
$age = '2 value';
$date = '3 value';
$string = "date, name, age";
function toImplode($string) { $line=''; foreach(explode(", ", $string) as $str){ global $$str; $line .= $$str.'|';} return $line;}
echo 'Variable to line formatted order is: '.toImplode($string).'<br/>';
输出:
Variable to line formatted order is: 3 value|1 value|2 value|<br/>
Try it online!
此代码完美运行...但为什么我将其用作 PHP 函数时出错?
$name = '1 value';
$age = '2 value';
$date = '3 value';
$string = "date, name, age"; //default CSV file Column order
会得到很好的结果:
date, name, age date|name|age 3 value|1 value|2 value|
通过使用此代码:
echo $string.'<br/>';
echo implode("|", explode(", ", $string)).'<br/><br/>';
$line='';
foreach(explode(", ", $string) as $str) {
$line .= $$str.'|';
}
echo $line;
我编写这个函数:
<?php
function toImplode($string)
{
$line = '';
foreach (explode(", ", $string) as $str) {
$line .= $$str . '|';
}
return $line;
}
echo 'Variable to line formatted order is:<br/> ' . toImplode($string) . '<br/>';
但是我得到了这个错误:
> Notice: Undefined variable: name in on line 22
> Notice: Undefined variable: age in on line 22
> Notice: Undefined variable: date in on line 22
我不明白为什么。
通过调试器 运行,我相信我已经找到了问题所在 - 如果您所指的错误是 date
、name
的未定义变量错误和 age
,这是由于 scoping - 在 PHP 函数中,该函数内的代码无法查看或访问在该函数外部设置的变量,除非您将它们定义为 global
,或将它们作为参数传递给函数。
您可以通过在函数中使用 global
关键字来执行此操作 - 即,要使变量 $name
、$date
和 $age
可访问,您d 添加此行:global $name, $date, $age;
。在您的脚本上下文中,global $$str;
在技术上是有效的并且 运行 也是如此,尽管我不确定这是否是最佳实践。
如果您指的是 Array to string conversion
通知,这是由您的 echo explode(...)
行引起的 - explode()
returns 一个数组,无法转换回一个字符串。您可能想尝试 print_r() or var_dump() 而不是输出数组内容。
您可以使用 global
keyword with variable variables ($$
):
在函数体中添加以下行
global $$str;
所以完整代码变为:
<?php
$name = '1 value';
$age = '2 value';
$date = '3 value';
$string = "date, name, age";
function toImplode($string) { $line=''; foreach(explode(", ", $string) as $str){ global $$str; $line .= $$str.'|';} return $line;}
echo 'Variable to line formatted order is: '.toImplode($string).'<br/>';
输出:
Variable to line formatted order is: 3 value|1 value|2 value|<br/>