Php 将全名汇总为短名。
我用PHP脚本构建的网站有一个问题, 我想将数据库中的全名学生前:Ahmad Najib Fuadi总结为我网站中的简称A.N.Fuadi: 我已经有了这样的数据库: 我尝试过这样的代码: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; ?>&
<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有两个以上的部分,这只会考虑前两个部分,并且将忽略第三个部分更新了代码。请检查这将在名称中使用无限数量的空格。