【问题标题】:How can I replace "{#text['..*var1*..'][..*var2*..]}" => {$text['..*var1*..'][..*var2*..]}如何替换 "{#text['..*var1*..'][..*var2*..]}" => {$text['..*var1*..'][..* var2*..]}
【发布时间】:2014-06-05 16:24:20
【问题描述】:

我有这个文本数组

$text = array( "T02" => array( 'EN' => 'English text for T02'), 
           "T03" => array( 'FR' => 'Texte anglais pour T03'));
$language = "FR";
$testtext = "Translated text: {#text['T03'][$language]}";   

我在这里需要 # 因为我通过函数从数据库中获取此文本。

所以我需要用 $ 替换 de #

// This will work, but I need 'T03' and $language to be variable:

$output = str_replace("{#text['T03'][$language]}","{$text['T03'][$language]}",$testtext); 
echo $output;

// This won't work:
$output = str_replace("#text","$text",$testtext);
echo $output;   // I get ==> Translated text: {Array['T03'][FR]} 

如何替换 "{#text['..var1..'][..var2..]}" ==> {$text[ '..var1..'][..var2..]} ?

【问题讨论】:

标签: php arrays wildcard str-replace


【解决方案1】:

使用preg_replace

<?php
$text = "{#text['..var1..'][..var2..]}";
$pattern = '/{#(.*)/';
echo preg_replace($pattern, '{\$$1', $text);

@Eduard,你不知道你在问什么。请使用这个。它仍然很糟糕,但至少不会让你的应用崩溃。

<?php
$text = array( "T02" => array( 'EN' => 'English text for T02'), 
           "T03" => array( 'FR' => 'Texte anglais pour T03'));
$language = "'FR'";
$testtext = "Translated text: {#text['T03'][$language]}"; 
$pattern = '/{#(?P<varName>\S+)\[\'(?P<someKey>\S+)\'\]\[\'(?P<langKey>\S+)\'\]}/';

$callback = function($match)use($text){
    return $text[$match['someKey']][$match['langKey']];
};
echo preg_replace_callback($pattern,$callback, $testtext);

对于特殊要求,所有理智到此结束。风险自负!

<?php
$text = array( "T02" => array( 'EN' => 'English text for T02'), 
           "T03" => array( 'FR' => 'Texte anglais pour T03'));
$language = "'FR'";
$testtext = "Translated text: {#text['T03'][$language]}"; 
$pattern = '/{#(.*?)}/';


echo eval('return "'.preg_replace($pattern, '{\$$1}', $testtext).'";');

【讨论】:

  • 这没有帮助。我得到“$text['T03'][FR]}”,但它没有激活数组。
  • 当然不是。是字符串,为什么要变成数组?
  • $text = array("T02" => array('EN' => 'T02 的英文文本'), "T03" => array('FR' => 'Texte anglais pour T03 '));是一个数组
  • $language = "EN"; $testtext = "翻译文本:{#text['T02'][$language]}"; => 应该给出:'翻译文本:T02 的英文文本') $language = "FR"; $testtext = "翻译文本:{#text['T03'][$language]}"; =?应该给出:'翻译文本:Texte anglais pour T03')
猜你喜欢
  • 2011-04-02
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2017-04-21
相关资源
最近更新 更多