【问题标题】:How to Write "decimal-to-hex-converted" numbers into a .csv file with PHP如何使用 PHP 将“十进制到十六进制转换”的数字写入 .csv 文件
【发布时间】:2018-09-10 13:09:24
【问题描述】:

尝试将一组从十进制转换为十六进制的数字写入 .csv 文件。 以下代码会将所需的输出放入浏览器中;

for ($i=0;$i<=15;$i++ ) {
    for ($j=0;$j<=15;$j++ ) {           
    echo dechex($i).",".dechex($j)." - ";}}

A portion of browser output is attached. from '0,0' to 'f,f'.

以下代码旨在将(与浏览器的输出相同)写入 .csv 文件,进入无限循环。感谢您的帮助。

$file = "colors.csv";       
$FH = fopen ($file, 'w') or die ("$file cannot  be opened for writing.");

for ($i=0;$i<=15;$i++ ) {   
for ($j=0;$j<=15;$j++ ) {           
        $i=dechex($i);
        $j=dechex($j);      
              fwrite ($FH, "$i");
              fwrite ($FH, ",");
              fwrite ($FH, "$j");
              fwrite ($FH, "\n");}}

@Mark Ba​​ker,@Nico Hasse,(10 小时后)感谢您的输入,以下代码 工作中。主要的尊重是:

1-fopen() 被放置在两个for() 循环内。 2-在fwrite($FH,"w")中,“w”改为“a” 3- 至于$i,$j&gt;9,十六进制#s 不能通过常规方式递增, 在循环结束时,$i,$j 被转换回十进制。

`for ($i=0;$i<=15;$i++ ) {
    for ($j=0;$j<=15;$j++ ) {
$file = "colors.csv";
        $FH = fopen ($file, "a") or die ("$file cannot be opened for writing.");        
            $i=dechex($i);
            $j=dechex($j);
            fwrite($FH, $i.",".$j."\n");
            $i=hexdec($i);
            $j=hexdec($j);
            fclose($FH);}
                }`      

【问题讨论】:

  • 你试过什么来调试这个问题?请为您的代码使用更好的格式
  • 使用临时变量而不是 $i=dechex($i)$j=dechex($j);(例如 $tmpI=dechex($i)$tmpJ=dechex($j);),否则您正在修改用于循环计数的值应该算数
  • 或者使用fwrite ($FH, dechex($i));fwrite ($FH, dechex($j));
  • 并注意 csv 文件行应该以 \n 结尾,而不是 html &lt;br&gt;
  • @MarkBaker:感谢您的建议。使用 $tmpI=dechex($i) ,我又得到了无限循环,使用 fwrite($FH, dechex($i)), 我得到了致命错误 Function name must be a string in C:...test4.php 在线。

标签: php loops hex decimal


【解决方案1】:

这么简单的事情有什么问题

$file = "colors.csv";       
$FH = fopen ($file, 'w')
    or die ("$file cannot  be opened for writing.");

for ($i=0; $i<=15; $i++) {   
    for ($j=0; $j<=15; $j++) {           
        fwrite ($FH, dechex($i));
        fwrite ($FH, ",");
        fwrite ($FH, dechex($j));
        fwrite ($FH, "\n");
   }
}

【讨论】:

  • 此代码不起作用,因为: 1-每次迭代都必须打开文件,写入新的数据行,然后关闭。将第一 2 行放在 2 个循环之外不会这样做。 2-在fopen($FH, "w"), w 中将删除并写入新数据,但`"a"` 会追加到现有列表并从(0,0) to (f,f) 创建一个完整的集合列表...继续...
  • (....continued.....)3- 一旦循环迭代达到 9,下一个十六进制 #s 就是字母“a,b,c,...” ,并且由于 9+1 不等于 a,因此迭代进入无限循环,因此在 fwrite() 之后,现在为十六进制格式的 $i 和 $j 必须返回十进制格式,以便递增它们成为可能。只需尝试新代码,看看它是否有效。
  • 为什么每次迭代都必须打开文件?这样做有什么合乎逻辑的理由(除了产生大量开销)?打开文件后,它会一直保持打开状态,直到通过显式调用 close() 或脚本终止时再次关闭。
  • 9+1不等于a是什么意思? 9+1 是10,当您调用dechex()...时,它会给出a 的结果。调用dechex() 不会将$i10 更改为a(所以没有需要将任何东西转换回来),但它返回一个 a 作为该函数调用的结果。你似乎对 PHP 函数的工作原理有很多误解
  • 只需运行代码,看看它是否有效 - demo - 然后说服我这是一个无限循环
猜你喜欢
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多