php 或 mysql 子字符串 mysql strlen

问题描述 投票:0回答:2

我有这个带有 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' ]

php mysql echo substr strlen
2个回答
0
投票

您可以尝试下面的操作,假设 $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;

?>

0
投票

令我惊讶的是,您无法将结果集变量与发布的代码中的变量进行交换,并且您没有显示如何迭代结果集,所以我想我会从查询步骤。我还想向您展示如何在单个函数调用中更简洁地实现屏蔽逻辑。

正则表达式模式将匹配在字符串末尾之前跟随零个、一个或两个字符的字符。实际上,最后一个、倒数第二个和倒数第三个字符将被替换——如果它们存在的话。

代码:(带有虚拟数据的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***
© www.soinside.com 2019 - 2024. All rights reserved.