我有这个带有 MySQL 数据库查询的 PHP 代码,我想显示 MySQL 数据库中的记录,例如名字和姓氏记录,我只想像 php echo $row 一样显示名字和姓氏的前 3 个字母输出,类似这样:
约翰***斯米***
杰夫***约翰***
<?php
$row = "Hamingway";
echo (strlen($row) > 3) ? substr($row, 0, 3) . str_repeat('*', strlen($row) - 3) : str_repeat('*', strlen($row));
?>
这是回显输出,可以工作
Ham******
但是这是手工编码的记录“Hemingway”,它不是来自我的 MySQL 数据库,我想要类似这样的显示,但是从我的数据库记录中查询和输出,例如 echo $row['first_name] 和 echo['last_name' ]
您可以尝试下面的操作,假设 $result 是 MySQL 查询的结果,以关联数组的形式获取。在这种情况下,您必须根据实际的数据库结构相应地调整键。
<?php
$result = [
'first_name' => 'John',
'last_name' => 'Smith'
];
// Process and display the first 3 letters of the first name and last name
$firstName = $result['first_name'];
$lastName = $result['last_name'];
$processedFirstName = (strlen($firstName) > 3) ? substr($firstName, 0, 3) . str_repeat('*', strlen($firstName) - 3) : str_repeat('*', strlen($firstName));
$processedLastName = (strlen($lastName) > 3) ? substr($lastName, 0, 3) . str_repeat('*', strlen($lastName) - 3) : str_repeat('*', strlen($lastName));
echo $processedFirstName . ' ' . $processedLastName;
?>
令我惊讶的是,您无法将结果集变量与发布的代码中的变量进行交换,并且您没有显示如何迭代结果集,所以我想我会从查询步骤。我还想向您展示如何在单个函数调用中更简洁地实现屏蔽逻辑。
正则表达式模式将匹配在字符串末尾之前跟随零个、一个或两个字符的字符。实际上,最后一个、倒数第二个和倒数第三个字符将被替换——如果它们存在的话。
代码:(带有虚拟数据的PHPize演示)
function mask($value)
{
return preg_replace('/.(?=.{0,2}$)/', '*', $value);
}
foreach ($mysqli->query("SELECT * FROM my_table ORDER BY LENGTH(last_name)") as $row) {
printf(
"<div>%s becomes %s</div><div>%s becomes %s</div>\n",
$row['first_name'],
mask($row['first_name']),
$row['last_name'],
mask($row['last_name'])
);
}
我的虚拟数据的输出:
Newt becomes N***
G becomes *
Bill becomes B***
Ng becomes **
Norton becomes Nor***
Who becomes ***
Chad becomes C***
Hawk becomes H***
Alan becomes A***
Joyce becomes Jo***
Dave becomes D***
Jonson becomes Jon***
Ned becomes ***
Flanders becomes Fland***