duanqiao1947 2011-05-16 20:57
浏览 33
已采纳

PHP自动数组键引号

I'm working on a large codebase that doesn't have quotes around any array keys, e.g. $_GET[page].

Does anyone have a script/regex that programmatically adds quotes to array keys for PHP?


update

Here's what I ended up doing:

egrep -lRZ "\.php" . | \
    xargs -0 -l sed -i -e "s/\$\([a-zA-Z_]\+\)\[\([a-zA-Z_]\+\)\]/$\1['\2']/g"

This only handles one-dimensional arrays.

  • 写回答

1条回答 默认 最新

  • 普通网友 2011-05-16 21:14
    关注

    I hated doing this in the past. This will cover all but severe edge cases and multidimentional arrays. Either use preg_replace or something that allows regex for mass replace in all files (like Dreamweaver).

    \$(\w+)\[(\w+)\]
    

    Replace like so (\#, where # is the match offset):

    $\1['\2']
    

    I believe Dreamweaver's replace syntax is:

    $$1['$2']
    

    Multidimentional might work with (after you run the above):

    \['(\w+)'\]\[(\w+)\]
    
    ['$1']['$2']
    

    And finally, inspired by @MarcB's comment, in theory you could use PHP::Tokenizer. See the example and change the case statment to trigger on T_ARRAY and alter the array to conform before outputting it (and every other part of the file). If all works well, you'd get a new file, which you could then loop into SPL::DirectoryIterator and update all files in one go (now and in the future).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。