Foreach 循环内 foreach 循环


Foreach loop inside foreach loop?

我有一个名字列表,每个名字由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 />";
    }
}