php後向引用怎麼帶入到函數參數

來源:互聯網
上載者:User
preg_replace('/{get_(\w+)}/',$arr[$1], $content);


$1為後向引用,我需要把匹配的 \w+ 作為參數,傳入到自訂函數,或者作為數組的索引,該怎麼實現呢


回複討論(解決方案)

preg_replace_callback 可以回呼函數,但是怎麼把匹配到的,作為數組的索引,這個我找不到方法

preg_replace('/{get_(\w+)}/e','$arr["$1"]', $content);

$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace('/{get_(\w+)}/e', '$arr["$1"]', $content);

擴充模式 e 表示 eval,表示將第二個參數當做 php 語句來執行
不過這種做法到了 php5.5 就廢止了,因為動態解釋 php 語句存在效率和安全的問題

合理的做法是使用 preg_replace_callback
下面開列 3 中寫法
$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace_callback('/{get_(\w+)}/', 'back', $content);function back($m) {  global $arr;  return $arr[$m[1]];}
$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace_callback('/{get_(\w+)}/', create_function('$m', 'global $arr; return $arr["$m[1]"];'), $content);
$content = '{get_abc}';$arr['abc'] = 123;echo preg_replace_callback('/{get_(\w+)}/', function($m) use($arr) { return $arr["$m[1]"];}, $content);
顯然第 3 種寫法最清晰,但只在 php5.3 才開始支援
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.