PHP автоматический массив кавычек - PullRequest
1 голос
/ 17 мая 2011

Я работаю над большой кодовой базой, в которой нет кавычек вокруг ключей массива, например $_GET[page].

У кого-нибудь есть скрипт / регулярное выражение, который программно добавляет кавычки в ключи массива для PHP?


обновление

Вот что я в итоге сделал:

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

Это только для одномерных массивов.

1 Ответ

2 голосов
/ 17 мая 2011

Я ненавидел делать это в прошлом. Это будет охватывать все случаи, кроме серьезных, и многомерных массивов. Либо используйте preg_replace, либо что-то, что позволяет регулярное выражение для массовой замены во всех файлах (например, Dreamweaver).

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

Заменить так (\#, где # - смещение совпадения):

$\1['\2']

Я полагаю, что синтаксис замены Dreamweaver:

$$1['$2']

Многомерный может работать с (после запуска выше):

\['(\w+)'\]\[(\w+)\]

['$1']['$2']

И, наконец, вдохновленный комментариями @ MarcB, теоретически вы можете использовать PHP :: Tokenizer . См. пример и измените статус регистра для запуска на T_ARRAY и измените массив для соответствия перед его выводом (и любой другой частью файла). Если все работает хорошо, вы получите новый файл, который затем можете зациклить на SPL::DirectoryIterator и обновить все файлы за один раз (сейчас и в будущем).

...