我正在使用PHP的多语言网站,在我的语言文件中,我经常使用包含多个变量的字符串,这些变量稍后将被填写以完成句子.
目前我正在放置{VAR_NAME}字符串并在使用时手动替换每个出现的匹配值.
所以基本上:
{X} created a thread on {Y}
成为:
Dany created a thread on Stack Overflow
我已经想到了,sprintf但我发现它不方便,因为它取决于变量的顺序,这些变量可以从一种语言变为另一种语言.
而且我已经检查了如何用php中的值替换字符串中的变量?而现在我基本上使用这种方法.
但是我有兴趣知道在PHP中是否有内置(或者可能不是)方便的方法,考虑到我已经在前面的例子中已经将变量命名为X和Y,更像是变量变量的$$ .
所以不要在字符串上执行str_replace,我可能会调用这样的函数:
$X = 'Dany';
$Y = 'Stack Overflow';
$lang['example'] = '{X} created a thread on {Y}';
echo parse($lang['example']);
Run Code Online (Sandbox Code Playgroud)
还打印出来:
Dany created a thread on Stack Overflow
谢谢!
编辑
字符串用作模板,可以使用不同的输入多次使用.
所以基本上做"{$X} ... {$Y}"不会做的伎俩,因为我将失去模板,字符串将初始化为起始值$X和$Y尚未确定.
我有一个关于mysql时区的奇怪问题.
在我的网站配置文件中,我有这一行设置时区:
mysql_query("SET SESSION time_zone = '$offset';"); // Offset is properly calculated, no worries about that
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我在此之后添加另一行,就像这样:
$q = mysql_query("SELECT NOW() as now");
$row = mysql_fetch_array($row);
echo $row["now"];
Run Code Online (Sandbox Code Playgroud)
执行该代码后,时间会正确显示.
但是,在其他一些查询中,我在表中插入行,这些表的列名为date,默认为CURRENT_TIMESTAMP.
行插入如下:
INSERT INTO `sessions` (`user_id`) VALUES `1`
Run Code Online (Sandbox Code Playgroud)
(会话表有一date列默认为CURRENT_TIMESTAMP)
但是插入DB中的值仍然指向服务器的时区:((
任何想法如何通过这个?
我想知道是否有一种简单的方法来比较几行MySQL数据.
特别是,我所拥有的是一个包含每个用户的设置值列表的表.
用户可以毫无问题地在gui中修改这些设置.
现在,我要做的是:每当用户保存新数据时,我想找到旧数据和待保存数据之间的差异,以找出哪些列已更改,然后保存到日志中. .
我现在正在这样做的方法是在保存和比较它之前读取对应于用户的行,通过变量变量来查找已更改的数据,但我发现它很慢,我想知道是否有更聪明的方法来做到这一点,也许在mysql查询里面(可能使用临时表?)或者使用一些我不知道的php mysql函数...
我希望你对我有一些想法.
(我检查了这个问题:https://stackoverflow.com/questions/218499/mysql-diff-tool,但结果与我想要的有很多不同)
提前致谢!
我想知道是否有类似于javascript或VB的with声明,但在PHP中
其工作方式,例如在VB中如下所示.这两个代码片段具有相同的效果:
array[index].attr1 = val1;
array[index].attr2 = val2;
array[index].attr3 = val3;
Run Code Online (Sandbox Code Playgroud)
等于:
With(array[index])
.attr1 = val1
.attr2 = val2
.attr3 = val3
End With
Run Code Online (Sandbox Code Playgroud) 我有一个jQuery对象obj封装了一组输入元素.
我正在使用此代码,以便从每个元素的值中创建一个数组:
$.map(obj, function(elem, i){
return $(elem).val();
});
Run Code Online (Sandbox Code Playgroud)
问题是有时某些输入字段包含无效值,我想在创建数组的过程中跳过它们.做一个简单return false似乎没有跳过元素,而是false在数组中插入一个.
我想知道是否有办法在没有.each明确使用的情况下实际执行此操作.
我有以下XAML摘录:
<SplitView Name="Menu" DisplayMode="CompactOverlay" OpenPaneLength="200" CompactPaneLength="0" Grid.RowSpan="2">
<SplitView.Pane>
<StackPanel>
<AutoSuggestBox Margin="0,20,0,20" Width="170" PlaceholderText="Search" QueryIcon="Find"></AutoSuggestBox>
<ListBox>
<ListBoxItem Tapped="Projects_Tapped">
<StackPanel Orientation="Horizontal">
<SymbolIcon Symbol="Library" />
<TextBlock Margin="10,0,0,0">Projects</TextBlock>
</StackPanel>
</ListBoxItem>
[....]
</ListBox>
</StackPanel>
</SplitView.Pane>
</SplitView>
Run Code Online (Sandbox Code Playgroud)
基本上,这个splitview被压缩,直到用户按下一个按钮然后将其设置IsPaneOpen为true,然后显示我的应用程序菜单.
问题是,我在菜单中的第一件事就是搜索框,无论我做什么,它似乎都会自动聚焦.它具有焦点的事实然后在手机上打开触摸键盘,这非常烦人并且隐藏了小型手机上的大部分菜单.
我尝试使用该TabIndex属性来给它一个巨大的数字,甚至为其他东西放一个较低的索引.
我也尝试将其设置IsTabStop为false,但似乎没有做任何事情.
是否有一种干净的方法可以防止盒子自动获得焦点?(除了禁用/隐藏元素然后再次启用/显示它)
c# xaml win-universal-app windows-10-mobile windows-10-universal
我想知道是否可以在Java Swing中更改默认的单选按钮菜单项外观.
默认情况下,带有一个圆点的圆圈将指示按钮的选定状态,但我只想在选定的菜单项旁边显示旧的勾选,并且在未选择的项目旁边不显示任何内容.(所有相关项目均为类型JRadioButtonMenuItem)
我尝试使用.setSelectedIcon(...)哪些可以在这里找到:
但没有任何改变,没有例外抛出,我仍然坚持默认的外观.
有任何想法吗?
我刚刚读了关于SQL注入的内容,并在我正在阅读的博客上发现了这个函数我想知道它是否对SQL注入是安全的..如果我传递remove_mq($_POST)给它,我可以$_POST["var"]在查询中使用没有问题吗?
function remove_mq($array){
foreach($array as $key => $value){
if(is_array($value)){
$array[$key] = remove_mq($value);
}
else{
$array[$key] = addslashes($value);
}
}
return $array;
}
Run Code Online (Sandbox Code Playgroud) 我有一个问题,理解为什么我的代码的这部分导致内存泄漏:
for($i=0; $i<count($values); $i++){
$values[$i] = addslashes($values[$i]);
}
Run Code Online (Sandbox Code Playgroud)
为了将代码放在上下文中,我有一个先前构建的名为values的数组,它包含要插入数据库的所有值.所有字段都是字符串,所以我需要转义所有字段,对于这个应用程序,addslashes或mysql_real_escape_string是一个很好的选择imo.
现在奇怪的是,只要我添加上面显示的部分,我就会收到如下消息:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes)
Run Code Online (Sandbox Code Playgroud)
我明白这会产生内存泄漏,但我不知道为什么.
挖掘进来,我注释掉for循环中唯一的一行,只留下for语句的好奇心,泄漏就消失了.任何想法可能意味着什么?
PS:字符串都是UTF8编码的,这可能是个问题吗?
编辑:
该数组包含以下内容:
Array (
[dossier] => 002A
[permis] =>
[adresse] => 18, rue Bellevue
[ville] => Ste-Anne-des-Lacs (Québec)
[province] =>
[code_postal] => J0R 1B0
[numero_centrale] => N/A
[routes] => De la Gare, droite chemin Avila jusqu'au bout et droite chemin Ste-Anne-des-lacs sur 1,8 km et droite sur Bellevue.
)
Run Code Online (Sandbox Code Playgroud) php ×6
jquery ×2
mysql ×2
addslashes ×1
arrays ×1
c# ×1
diff ×1
galleria ×1
java ×1
javascript ×1
jradiobutton ×1
memory-leaks ×1
skip ×1
sql ×1
swing ×1
timezone ×1
variables ×1
xaml ×1