Php 将全名汇总为短名。

Php 将全名汇总为短名。,php,codeigniter,Php,Codeigniter,我用PHP脚本构建的网站有一个问题, 我想将数据库中的全名学生前:Ahmad Najib Fuadi总结为我网站中的简称A.N.Fuadi: 我已经有了这样的数据库: 我尝试过这样的代码: <tbody> <?php if($query):foreach($query as $post):?> <tr> <td class="center"><?php echo $post->FNAME; ?>&

我用PHP脚本构建的网站有一个问题, 我想将数据库中的全名学生前:Ahmad Najib Fuadi总结为我网站中的简称A.N.Fuadi:

我已经有了这样的数据库:

我尝试过这样的代码:

 <tbody>
<?php if($query):foreach($query as $post):?>    
    <tr>
        <td class="center"><?php echo $post->FNAME; ?></td>
        <td class="center"><?php echo $post->LNAME ?></td>
    </tr>
<?php endforeach; ?>
<?php endif;?>
</tbody>
我不知道把名字缩写成FNAME


谢谢

请尝试以下代码:

$first = "Ahmad Najib";//fetch real first name from the database
$last = "Fuadi";//fetch real name from the database
$result = rtrim(preg_replace('#([^ ])[^ ]* *#i', '$1. ', $first)," ");
$result = "$result $last";
echo "$result";//or do something else with the shorter name
该方法非常健壮,例如,双空间被解释为简单的一个空间,等等

您可以测试此代码

因此,当将此方法与您自己的代码合并时,您会得到:

<tbody>
<?php if($query):foreach($query as $post):?>    
    <tr>
        <td class="center"><?php
        $first = $post->FNAME;
        $result = rtrim(preg_replace('#([^ ])[^ ]*[ ]*#i', '$1. ', $first)," ");
        echo $result;
        ?></td>
        <td class="center"><?php echo $post->LNAME ?></td>
    </tr>
<?php endforeach; ?>
<?php endif;?>

请尝试以下代码:

$first = "Ahmad Najib";//fetch real first name from the database
$last = "Fuadi";//fetch real name from the database
$result = rtrim(preg_replace('#([^ ])[^ ]* *#i', '$1. ', $first)," ");
$result = "$result $last";
echo "$result";//or do something else with the shorter name
该方法非常健壮,例如,双空间被解释为简单的一个空间,等等

您可以测试此代码

因此,当将此方法与您自己的代码合并时,您会得到:

<tbody>
<?php if($query):foreach($query as $post):?>    
    <tr>
        <td class="center"><?php
        $first = $post->FNAME;
        $result = rtrim(preg_replace('#([^ ])[^ ]*[ ]*#i', '$1. ', $first)," ");
        echo $result;
        ?></td>
        <td class="center"><?php echo $post->LNAME ?></td>
    </tr>
<?php endforeach; ?>
<?php endif;?>

我修改你的代码检查并确认

<?php if($query):foreach($query as $post):?>    
<tr>
    <td class="center">
    <?php 
    $fname = $post->FNAME;
            $firstName = getAbrName($fname);  /// call function with pass first name
    //$firstName = substr($fname,0,1).'.';
    //if(strpos($fname,' ')){
    //  $firstName .= substr($fname,(strpos($fname,' ')+1),1).'.';
    //}
    echo $firstName;
    ?>
    </td>
    <td class="center"><?php echo $post->LNAME;?></td>
</tr>
<?php endforeach; ?>
<?php endif;?>
<?php function getAbrName($name = ''){
       $nameArray = explode(' ',$name);
    $returnName = '';
    if(is_array($nameArray)){
        foreach($nameArray as $value){
            $returnName .= substr($value,0,1).'.';
        }
    }
    return $returnName;
}
?>

我修改你的代码检查并确认

<?php if($query):foreach($query as $post):?>    
<tr>
    <td class="center">
    <?php 
    $fname = $post->FNAME;
            $firstName = getAbrName($fname);  /// call function with pass first name
    //$firstName = substr($fname,0,1).'.';
    //if(strpos($fname,' ')){
    //  $firstName .= substr($fname,(strpos($fname,' ')+1),1).'.';
    //}
    echo $firstName;
    ?>
    </td>
    <td class="center"><?php echo $post->LNAME;?></td>
</tr>
<?php endforeach; ?>
<?php endif;?>
<?php function getAbrName($name = ''){
       $nameArray = explode(' ',$name);
    $returnName = '';
    if(is_array($nameArray)){
        foreach($nameArray as $value){
            $returnName .= substr($value,0,1).'.';
        }
    }
    return $returnName;
}
?>
尝试我的函数getShortName

测试数据:

$names = array(
        array('fname' => 'Ahmad', 'lname' => 'Fuadi'),
        array('fname' => 'Ahmad Najib', 'lname' => 'Fuadi'),
        array('fname' => 'Ahmad najib mama', 'lname' => 'Fuadi'),
        array('fname' => 'ahmad baba Mama', 'lname' => 'Fuadi'),
        array('fname' => 'allen iverson', 'lname' => 'chak')
    );

foreach($names as $n)
    print(getShortName($n['fname'], $n['lname']) . "<br />");
尝试我的函数getShortName

测试数据:

$names = array(
        array('fname' => 'Ahmad', 'lname' => 'Fuadi'),
        array('fname' => 'Ahmad Najib', 'lname' => 'Fuadi'),
        array('fname' => 'Ahmad najib mama', 'lname' => 'Fuadi'),
        array('fname' => 'ahmad baba Mama', 'lname' => 'Fuadi'),
        array('fname' => 'allen iverson', 'lname' => 'chak')
    );

foreach($names as $n)
    print(getShortName($n['fname'], $n['lname']) . "<br />");

下面的东西。不管FNEX有多少个部分,只考虑左边的前两个部分的最大值。

SELECT

CONCAT
(
    SUBSTR( FNAME ,1 ,1 ) ,'.'

    ,IF
    (
         LOCATE( ' ' ,FNAME ) > 0
        ,CONCAT( SUBSTR( FNAME FROM ( 1 + LOCATE( ' ' ,FNAME ) ) FOR 1 ) ,'.' )
        ,''
    )

    ,' '

    ,LNAME
) AS short_name

FROM table_name
因此: Ahmad,Fuadi结果:A.Fuadi Ahmad Najib,Fuadi结果:A.N.Fuadi Ahmad Najib Mahmood,Fuadi也得到了结果:A.N. Fuadi

< P> >下面的某个部分。不管FNEX有多少个部分,只考虑左边的前两个部分的最大值。

SELECT

CONCAT
(
    SUBSTR( FNAME ,1 ,1 ) ,'.'

    ,IF
    (
         LOCATE( ' ' ,FNAME ) > 0
        ,CONCAT( SUBSTR( FNAME FROM ( 1 + LOCATE( ' ' ,FNAME ) ) FOR 1 ) ,'.' )
        ,''
    )

    ,' '

    ,LNAME
) AS short_name

FROM table_name
因此: Ahmad,Fuadi结果:A.Fuadi Ahmad Najib,Fuadi结果:A.N.Fuadi Ahmad Najib Mahmood,Fuadi也得出结论:A.N.Fuadi

为什么不使用正则表达式

<tbody>
<?php if($query): foreach($query as $post): ?>    
    <tr>
        <td class="center"><?php echo preg_replace('/(.)[^\s]+\s?/', '${1}.', strtoupper($post->FNAME)); ?></td>
        <td class="center"><?php echo $post->LNAME; ?></td>
    </tr>
<?php endforeach; endif; ?>
</tbody>
为什么不使用正则表达式呢

<tbody>
<?php if($query): foreach($query as $post): ?>    
    <tr>
        <td class="center"><?php echo preg_replace('/(.)[^\s]+\s?/', '${1}.', strtoupper($post->FNAME)); ?></td>
        <td class="center"><?php echo $post->LNAME; ?></td>
    </tr>
<?php endforeach; endif; ?>
</tbody>

如果一个人只有一个或两个以上的名字,等等会发生什么?如果一个人只有一个或两个以上的名字,等等会发生什么?如果FNAME有两个以上的部分,这只会考虑前两个部分,并且将忽略第三个部分更新了代码。请检查这将在第一个名称中使用无限数量的空格,如果FNEY有两个以上的部分,这只会考虑前两个部分,并且将忽略第三个部分更新了代码。请检查这将在名称中使用无限数量的空格。