PHP:创建动态(变量)文件名 - 未定义的变量:65

PHP: Create dynamic (variable) file name- Undefined variable: 65

提问人:Solace 提问时间:8/24/2014 更新时间:8/24/2014 访问量:3103

问:

我需要在PHP中设置一个动态文件名。因此,我编写了一个小示例脚本来表示我面临的问题。

当我运行以下脚本时,我得到以下错误输出,并且创建的文件只是命名,而它应该被命名.csv0101.csv

输出:

Notice: Undefined variable: 65 in C:\xampp\htdocs\testsEight.php on line 5

Notice: Undefined variable: 65 in C:\xampp\htdocs\testsEight.php on line 7
Array ( [0] => BillClinton )

为什么它调用变量 as 而不是 ?我正在尝试遵循这些准则。在下面的代码中,我也尝试用 ,没有运气!65$the_id${$the_id}

法典:

<?php

$type = 'BillClinton';
$the_id = 0101;
file_put_contents ( 'C:/'.$$the_id.'.csv' , $type ."," , FILE_APPEND );

$file = fopen('C:/'.$$the_id.'.csv', 'r');
$line = fgetcsv($file);
array_pop($line);

if ($line !== FALSE) {
    //$line is an array of the csv elements in a line. The fgetcsv() function parses a line from an open file, checking for CSV fields.The fgetcsv() function stops returning on a new line, at the specified length, or at EOF, whichever comes first.
    print_r($line);//check
} else {echo 'FALSE';}

请帮我解决这个问题。

PHP csv 文件名 variable-variables

评论

1赞 Funk Forty Niner 8/24/2014
你使用的是 2 in 和 1 in,但是前导零也可能是一个因素(被读作八进制?),所以你可能想用引号括起来$$$the_id$the_id = 0101;$the_id = "0101";
0赞 Solace 8/24/2014
@Fred-ii- 首先,非常感谢。其次,我的问题是,在实际程序中,它来自数据库。所以我不太确定它是一个字符串(用引号括起来)还是一个数字。那么有没有办法确保如果它是一个数字,它保持完整并且不会被转换呢?$the_id
0赞 Funk Forty Niner 8/24/2014
不客气,Zarah,干杯

答:

2赞 Naing Lin Aung 8/24/2014 #1

您在 $$the_id 中有额外的 $,这导致调用变量名称 the_id 的 $the_id 的引用。所以你需要删除它。代码如下;

<?php

$type = 'BillClinton';
$the_id = 0101;
file_put_contents ( 'C:/'.$the_id.'.csv' , $type ."," , FILE_APPEND );

$file = fopen('C:/'.$the_id.'.csv', 'r');
$line = fgetcsv($file);
array_pop($line);

if ($line !== FALSE) {
    //$line is an array of the csv elements in a line. The fgetcsv() function parses a line from an open file, checking for CSV fields.The fgetcsv() function stops returning on a new line, at the specified length, or at EOF, whichever comes first.
    print_r($line);//check
} else {echo 'FALSE';}

有关更多详细信息,您可以查看 PHP 文档

评论

0赞 Funk Forty Niner 8/24/2014
我在 4-5 分钟前说过。OP 想要使用变量变量 php.net/manual/en/language.variables.variable.php
0赞 Naing Lin Aung 8/24/2014
对不起,我没有看到。
1赞 Funk Forty Niner 8/24/2014
另外,OP 指出“为什么它调用变量为 65”——这是因为未加引号的变量被视为八进制;我也说过。0101
1赞 Solace 8/24/2014
我很高兴我想要的事情可以在没有变量的情况下完成。但问题是我不希望将未加引号的八进制视为八进制,因为它来自数据库,所以我无法控制它。0101"
0赞 Eduard 8/24/2014
@Zarah,不管是 a 还是 .当与 连接时,无论其初始类型如何,都会成为字符串。作为提示,您可以根据需要控制它的类型,它被称为 , (string)$the_id 将作为字符串返回。与 、 等相同。stringinteger'C:/'.$id.'.csv'$idtype-casting0101'0101'(int)(bool)(float)
2赞 Funk Forty Niner 8/24/2014 #2

您正在使用两个输入和一个输入$$$the_id$the_id = 0101;

“为什么它调用变量为 65”

前导零被视为八进制,因此请将其括在引号中0101$the_id = "0101";

评论

0赞 Solace 8/24/2014
首先,非常感谢。其次,我的问题是在实际程序中,$the_id 来自数据库。所以我不太确定它是一个字符串(用引号括起来)还是一个数字。那么有没有办法确保如果它是一个数字,它保持完整并且不会被转换呢?
0赞 Funk Forty Niner 8/24/2014
@Zarah 不客气。让我考虑一下这个问题。但是,如果你保持它等,你能继续使用它吗?$the_id = "0101";
0赞 Solace 8/24/2014
不,我为这个小例子进行了硬编码。在真正的程序中,来自数据库。而且我不确定它是一个字符串(带引号)还是一个数字(未加引号)。0101$the_id
1赞 Funk Forty Niner 8/24/2014
@Zarah 我不了解那个插件,但我会看看我能找到什么。如果我不能或其他任何给出答案的人,你可能不得不问另一个问题,展示你是如何从中拉出来的,并标记为,以及 - 如果这是你正在使用的 API。Moodlemysqlmysqli
1赞 Funk Forty Niner 8/24/2014
@Zarah 您也可以尝试$the_id = int($variable);
1赞 Eduard 8/24/2014 #3

首先,你的例子是错误的。PHP 永远不会允许您定义整数,甚至不允许将“字符串转换”整数定义为变量名称。

脚本中唯一的问题是您使用的是双美元符号,这是对(假设是字符串或整数,无关紧要)的引用。$0101$the_id0101

简单的解决方案是删除您的双美元符号:

file_put_contents ( 'C:/'.$the_id.'.csv' , $type ."," , FILE_APPEND );

$file = fopen('C:/'.$the_id.'.csv', 'r');

这背后的想法是变量的名称可以是变量。这就是你的问题是如何产生的。

$a = 'hello';
$$a = 'world';

echo $hello; // will output 'world';

问候。

评论

0赞 Solace 8/24/2014
删除多余的内容后,它确实会写入文件,然后读取它。@Fred-ii- 提到的唯一问题是,当是整数(即不加引号)时,它被视为八进制,因此转换为并将文件命名为$01016565.csv
0赞 Solace 8/24/2014
投了赞成票,因为这实际上是问题所在。但正如我在上面的评论中提到的,我不清楚答案中认为“假设 $the_id 是 0101 字符串或整数,无关紧要”的部分。如果您能澄清这一点,我将不胜感激,以便我了解您试图解释的内容。谢谢。$$
1赞 Eduard 8/26/2014
@Zarah很抱歉回复晚了。当您像在 PHP 中那样手动定义变量时,您将无法仅使用整数来定义它的名称。这意味着,这是不可能的,并且会导致致命的错误,并且牢记这一点,您会考虑从数据库返回 $the_id 的事实(或者我猜,如果它是一个索引,它很可能是整数)。无论哪种方式,当将整数类型 var 连接到字符串中时,它将被连接起来,结果将是 .即使 int 或 string,结果仍将是 string。希望你明白。$var$0101integerstring$the_id
0赞 Solace 8/26/2014
是的,我明白了。我脑海中有一个问题,如果我们将一个整数与一个字符串连接起来,这是否会导致一个字符串。所以非常感谢你。