Making Lua Like Php |
|
Note: Some of these PHP-style functions don't do exactly the same as PHP. In some cases this is intentional.
See PHP-like print_r function in TableSerialization.
Example: explode(" and ","one and two and three and four") --> {"one","two","three","four"}
Compatibility: Lua 5.0 and 5.1
function explode(div,str) -- credit: http://richard.warburton.it if (div=='') then return false end local pos,arr = 0,{} -- for each divider found for st,sp in function() return string.find(str,div,pos,true) end do table.insert(arr,string.sub(str,pos,st-1)) -- Attach chars left of current divider pos = sp + 1 -- Jump past current divider end table.insert(arr,string.sub(str,pos)) -- Attach chars right of last divider return arr end
Use table.concat
:
PHP implode(join,array)
is equivalent to Lua table.concat(table,join)
PHP: implode(" ",array("this","is","a","test","array")) --> "this is a test array"
Lua: table.concat({"this","is","a","test","array"}," ") --> "this is a test array"
function phpTable(...) -- abuse to: http://richard.warburton.it local newTable,keys,values={},{},{} newTable.pairs=function(self) -- pairs iterator local count=0 return function() count=count+1 return keys[count],values[keys[count]] end end setmetatable(newTable,{ __newindex=function(self,key,value) if not self[key] then table.insert(keys,key) elseif value==nil then -- Handle item delete local count=1 while keys[count]~=key do count = count + 1 end table.remove(keys,count) end values[key]=value -- replace/create end, __index=function(self,key) return values[key] end }) for x=1,table.getn(arg) do for k,v in pairs(arg[x]) do newTable[k]=v end end return newTable end
Example Usage:
-- arguments optional test = phpTable({blue="blue"},{red="r"},{green="g"}) test['life']='bling' test['alpha']='blong' test['zeta']='blast' test['gamma']='blue' test['yak']='orange' test['zeta']=nil -- delete zeta for k,v in test:pairs() do print(k,v) end
The output:
blue blue red r green g life bling alpha blong gamma blue yak orange
Example: preg_replace("\\((.*?)\\)","", " Obvious exits: n(closed) w(open) rift")
The following preg_replace variants support using the wildcards %n in the replace.
1. Using Lua-style regular expressions:
function preg_replace(pat,with,p) return (string.gsub(p,pat,with)) end
2. Using PCRE or POSIX regular expressions:
function preg_replace(pat,with,p) return (rex.gsub(p,pat,with)) end
[lua-phpserialize] module implements serialization of Lua tables to PHP serialize() format.