我在Google上搜索过,但是,我仍然无法找到解决阵列问题的最佳解决方案。
预期:
1. 用户将字符串发布到服务器 - >
2. 我们过滤字符串并替换与数据库中存储的数据匹配的单词 - >
3 将已被我们替换的字符串插入数据库。
当前完成:
1。数据表,其中包含名为
的列(1)ID (2)alias (3)replacement
2. 表单允许用户发布字符串
(post by jquery-ajax)
3. 函数返回数组
中表的所有结果
测试此课程而不阅读Db的结果:
类
class replace{ function tag($_input){ $definition = array('morning' => 'Good morning!', 'nowTime' => time()); foreach ($definition as $key => $value) $_input= str_replace('{{' . $key . '}}', $value, $_input); return $_input;` } }
使用方法
$replace= new replace(); $_input = '{{morning}} everyone, current unix time is {{nowTime}}' ; echo $replace->tag($_input);
输出结果(成功)
大家早上好,目前的unix时间是1417758157
但是,当我尝试使用数据库的数组输出来替换$definition
问题发生了:
数据库输出
阵列
0 => array 'ID' => 445 'alias' => 'morning' 'replacement' => 'Good morning' 1 => array 'ID' => 446 'alias' => 'nowTime' 'replacement' => time() 2 => array 'ID' => 447 'alias' => 'tommorowNow' 'replacement' => time()+86400
试过
function replace(){ // $tagEngine is the array ouput from Db foreach ($tagEngine as $arrKey) { $definition = array($arrKey['alias'] => $arrKey['replacement']); return ($definition); }; }
但只返回第一个结果
阵列
'morning' => 'Good morning'
此外,我想先问一下如何完成我预期的结果。
我很困惑把我的str_replace放在$replace()
。
谢谢!
答案 0 :(得分:0)
在我看来,有些事情需要改变。首先,使用你班级中的定义,而不是单独使用(否则你只是使用类来存储函数而不是它的' object' -properties);
class replace {
public $definitions;
public function setDefinitions($definitions) {
$this->definitions = $definitions;
}
public function tag($input) {
if($this->definitions && is_array($this->definitions)) {
foreach ($this->definitions as $definition) {
if($defintion['alias'] == 'time') {
$input = str_replace('{{' . $definition['alias'] . '}}', date('Y-m-d'), $input);
} else {
$input = str_replace('{{' . $definition['alias'] . '}}', $definition['replacement'], $input);
}
}
}
return $input;
}
}
如上所示,您可以将数据库中的定义存储在对象中,并在tag()
公共方法中使用它们。
其次,不是使用函数,只需在需要的地方调用字符串的解析。像这样:
$replace = new replace();
$replace->setDefinitions($tagEngine);
$parsedString = $replace->tag('{{morning}} everyone, current unix time is {{nowTime}}');
echo $parsedString;
我还没有对代码进行测试(所以我希望我没有犯任何错误)。