我有一个名字列表,每个名字由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 是字符串,给定数组。
我该怎么做?
<?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/>";
}
如果你有一个字符串,你会
- 用
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 代码的脚本执行此操作是没有意义的。此外,它使您的代码难以阅读,并占用了您大量宝贵的时间。
你可以试试这个
<?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);
?>
您可以看到此详细信息分解和阵列推送
使用这个
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 />";
}
}