为了账号安全,请及时绑定邮箱和手机立即绑定

用PHP中数组中的值替换子字符串

用PHP中数组中的值替换子字符串

PHP
德玛西亚99 2021-06-10 14:19:36
我正在尝试使用数组编写一个 JSON 文件。最初,该文件用于在服务器上创建 colorbook.js 文件,然后手动查找和替换以将所有值塞入其中。这是代码:<?php$colorsperpage = 48; // format is 6 columns by 8 rows$letters = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K');$hexValues = array('ECECEC', 'D9D9D9', 'C7C7C7', 'B4B4B4', 'A2A2A2');$txt = "var color = {\r\n";for ($i = 0 ; $i < count($letters) ; $i++){    $pagenum = $i + 1;    for ( $j = 1; $j <= $colorsperpage; $j++ ){        if ($j < 10){            if ($j == $colorsperpage){                $txt .= "\t\"" . $letters[$i] . $pagenum . "-" . "0" . $j . "\"  :  \"rgba(255,255,255,1)\"\r\n";            } else {                $txt .= "\t\"" . $letters[$i] . $pagenum . "-" . "0" . $j . "\"  :  \"rgba(255,255,255,1)\",\r\n";            }        } else {            if ($j == $colorsperpage){                $txt .= "\t\"" . $letters[$i] . $pagenum . "-" . $j . "\"  :  \"rgba(255,255,255,1)\"\r\n";            } else {                $txt .= "\t\"" . $letters[$i] . $pagenum . "-" . $j . "\"  :  \"rgba(255,255,255,1)\",\r\n";            }        }    }};$txt .= "};";foreach ($hexValues as $hex){    $txt = preg_replace('/rgba(255,255,255,1)/', $hex, $txt, 1);}$jsonFile = fopen('colorbook.js', 'w') or die('Unable to open file!');fwrite($jsonFile, $txt);fclose($jsonFile);?>原始脚本确实正确地写入了文件(如果您删除了 foreach 循环)。我假设运行 preg_replace 会遍历该字符串,一次一个替换十六进制值。注意原始数组是 528 项;为了在这里发帖,我缩短了它。每个 RGBA 条目一个。有人可以让我知道我做错了什么吗?谢谢。
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

不要手动创建 JSON。在循环中构建数组,并json_encode()在最终结果上使用。您可以在循环期间从数组中获取十六进制代码,而不是之后进行数百次字符串替换。


并且要格式化数组键,您可以使用sprintf()连接所有部分并为$j.


<?php

$result = [];

$color_index = 0;

foreach ($letters as $i => $letter) {

    $pagenum = $i + 1;

    for ($j = 1; $j <= $colorsperpage; $j++) {

        $key = sprintf("%s%d-%02d", $letter, $pagenum, $j);

        $colorcode = $hexValues[$color_index++];

        $result[$key] = $colorcode;

    }

}

file_put_contents("colorbook.js", "var color = " . json_encode($result));


查看完整回答
反对 回复 2021-06-13
  • 1 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信