我有一个名单,每个名字都包含 2-4字:姓名,(如果存在)中间名,姓氏。
这些是名字:
等
我想打印这个名字:姓氏,姓名中间名(如果存在)
以上名称将为:
等
如果我只有一个名字,我可以使用该代码:
<?php $exp1 = explode(" ", $author1); ?>
<?php if (count($exp1) == 2) {?>
<?php print ($exp1[1] .', ' .$exp1[0]); ?>
<?php } elseif (count($exp1) == 3) {?>
<?php print ($exp1[2] .', ' .$exp1[0] .' ' .$exp1[1]); ?>
<?php } elseif (count($exp1) == 4) {?>
<?php print ($exp1[3] .', ' .$exp1[0] .' ' .$exp1[1] .' ' .$exp1[2]); ?>
<?php }?>
每个页面可以有不同数量的作者,我认为我可以使用foreach为每个作者名称应用上述代码,但我无法做到这一点。
我尝试了一段代码:
<?php foreach $author as $obj): ?>
<?php $a = explode (" ", $obj) ?>
<?php endforeach ?>
...
但它给出了错误:
explode()期望参数2为字符串,给定数组。
我该怎么做?
答案 0 :(得分:2)
<?php
$names = array(
'Ali Yilmaz',
'Taha Ugur Unal',
'Omer Ibrahim Tahsin Son',
'Recai Sahin'
);
// First you should iterate through:
foreach ($names as $name) {
// and now, let make the job
// split by words
$parts = explode(' ', $name);
if (count($parts) == 1) {
echo "{$name}<br/>";
continue;
}
// get last word
$last = array_pop($parts);
// Print last one, comma, and rest of name
echo "{$last}, " . implode(' ', $parts) . "<br/>";
}
答案 1 :(得分:1)
如果您有一个字符串,那么
explode()
分开。implode()
加入名称的其余部分。请参阅以下示例:
<?php
$name = "Son of the Mask";
$words = explode(" ", $name); // split the string wherever there is a whitespace.
$surname = array_pop($words);
$restOfTheName = implode(" ", $words); // join the words with a whitespace in between them.
echo $surname . ", " . $restOfTheName;
?>
另一方面,如果您有一个名为$namelist
的数组中的名称列表,则可以使用foreach()
循环遍历列表。
您可以这样做:
<?php
foreach ($namelist as $name)
{
$words = explode(" ", $name);
$surname = array_pop($words);
$restOfTheName = implode(" ", $words);
echo $surname . ", " . $restOfTheName;
}
?>
希望帮助:-)
不,您不需要在每一行使用<?php
和?>
。这只是有用的,比如当你想在HTML标签中使用PHP的小片段时。
例如,假设您要在无序列表中显示某些信息。然后你会做类似
的事情<?php
$info1 = "Head over to Google.com";
$info2 = "Search before you post!";
?>
<ul>
<li><?php echo $info1; ?></li>
<li><?php echo $info2; ?></li>
</ul>
但是,对于仅包含PHP代码的脚本执行此操作没有意义。此外,它使您的代码难以阅读,并占用了大量宝贵的时间。
答案 2 :(得分:0)
<?php
$newNameArray=array();
$namesArray = array(
'Ali Yilmaz',
'Taha Ugur Unal',
'Omer Ibrahim Tahsin Son',
'Recai Sahin'
);
foreach ($namesArray as $name) {
$partsOfName = explode(" ", $name);
//last name
$lastName = array_pop($partsOfName);
// store the name in new array
$newNameArray[]=$lastName.", ".implode(" ", $partsOfName);
}
//show all names
var_dump($newNameArray);
?>
您可以查看详情explode和array push
答案 3 :(得分:-1)
使用此
foreach ($author as $obj) {
$nameArr = explode(' ',$obj);
if(count($nameArr) > 1) {
$lname = $nameArr[count($nameArr)-1];
array_pop($nameArr);
echo $lname.", ".implode(' ',$nameArr);
echo "<br />";
} else {
echo $obj;
echo "<br />";
}
}