PHP:按预定CSV顺序格式化变量。。。但为什么这段代码作为函数会中断呢?

PHP:按预定CSV顺序格式化变量。。。但为什么这段代码作为函数会中断呢?,php,function,csv,explode,implode,Php,Function,Csv,Explode,Implode,这个代码工作得很好。。。但为什么我在使用它作为PHP函数时出错呢 $name = '1 value'; $age = '2 value'; $date = '3 value'; $string = "date, name, age"; //default CSV file Column order 将取得巨大的成果: 通过使用此代码: echo $string.'<br/>'; echo implode("|", explode(&q

这个代码工作得很好。。。但为什么我在使用它作为PHP函数时出错呢

$name = '1 value';
$age  = '2 value';
$date = '3 value';

$string = "date, name, age"; //default CSV file Column order
将取得巨大的成果:

通过使用此代码:

echo $string.'<br/>'; 

echo implode("|", explode(", ", $string)).'<br/><br/>';

    $line='';
    foreach(explode(", ", $string) as $str)    {
            $line .= $$str.'|';
    }
    echo $line;

我不明白为什么。

通过调试器运行了这个问题,我相信我已经找到了问题所在-如果您所指的错误是日期、名称和年龄的未定义变量错误,这是由于-在PHP函数中,该函数内的代码无法查看或访问在该函数外设置的变量,除非将其定义为全局变量,或将其作为参数传递给该函数

您可以通过在函数中使用global关键字来实现这一点,也就是说,要使变量$name、$date和$age可访问,您需要添加以下行:global$name、$date、$age;。在脚本的上下文中,全局$$str;在技术上是有效的,也会运行,尽管我不确定这是否是最佳实践

如果您指的是数组到字符串的转换通知,这是由您的回音爆炸引起的。。。line-explode返回一个数组,该数组不能转换回字符串。您可能希望尝试或改为输出数组内容。

您可以将关键字与$$一起使用:

在函数体中添加以下行

全球$$str; 因此,完整代码变成:


当你说这个函数工作得很完美,而我在同一句话中将这段代码用作PHP函数时,我感到困惑。此外,您得到了什么错误?$variable_数组的结构/内容是什么?是:explode,$string;我修正了我的问题codeecho explode,$string应该给出警告注意:数组到字符串的转换对不起,我试图简化这个问题,但我忽略了这一点,它是:echo$string。;对不起,我试图简化这个问题,但我忽略了这个:echo$string。;现在问题已经解决了。我可以将全局varsOutput设置为:3值| 1值| 2值|而不是var名称,正如您所说:日期|名称|年龄|请查看我的编辑,我完全误解了这个问题;
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