foreach循环中的Foreach循环?

时间:2014-11-22 12:27:17

标签: php foreach explode

我有一个名单,每个名字都包含 2-4字:姓名,(如果存在)中间名,姓氏。

这些是名字:

  • Ali Yilmaz
  • Taha Ugur Unal
  • Omer Ibrahim Tahsin Son
  • Recai Sahin

我想打印这个名字:姓氏,姓名中间名(如果存在)

以上名称将为:

  • Ali Yilmaz - > Yilmaz,Ali
  • Taha Ugur Unal - > Unal,Taha Ugur
  • Omer Ibrahim Tahsin Son - > 儿子,Omer Ibrahim Tahsin
  • Recai Sahin - > Sahin,Recai

如果我只有一个名字,我可以使用该代码:

    <?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为字符串,给定数组。

我该怎么做?

4 个答案:

答案 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);
?>

您可以查看详情explodearray 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 />";
    }
}