我正在使用一个函数,该函数使用用户在调用函数时设置的自定义输出格式,类似于date()
函数。
这个函数调用的数据是从数据库返回的,所以我需要一种方法将用户在模式中使用的字母与表中的键配对,这就是我想出的:
function getUserInfo($id, $pattern = "f, l") {
//convert single letter format to key used in database
$keys = ["f", "l", "u", "e"];
$values = ["name_first", "name_last", "Username", "email"];
$pattern = str_replace($keys, $values, $pattern);
$user = [
"uid" => 1,
"Username" => "ldavid",
"name_first" => "Larry",
"name_last" => "David",
"email" => "ldavid@example.com",
];
foreach($user as $key => $info) {
str_replace($key, $info, $pattern);
}
return $pattern;
}
这个问题是将单个字母fomrat转换为数据库中使用的密钥。为了解决这个问题,我可以让用户输入数据库中的确切键,但我宁愿它只是一个字母。
在目前的代码中,我总是得到输出namemail_first, namemail_last
。我认为问题是,当调用str_replace来转换字母时,单词" name"有一个" e"在其中,因此被"电子邮件"取代。然后,没有任何键与数据库中的键匹配,因此不再进行替换。
我想知道是否有更好的方法来处理这种逻辑,我有点坚持如何解决这个问题。如何正确地将用户提供的单个字母替换为数据库中的密钥?
修改
在评论中,建议使用strstr()
;这样做,我得到一个错误:
警告:strstr():needle不是字符串或整数
$keys = ["f", "l", "u", "e"];
$values = ["name_first", "name_last", "Username", "email"];
$pattern = strstr($pattern, array_combine($keys,$values));