php foreach用户名,但不要干预

时间:2017-02-10 11:22:26

标签: php foreach

我到处都在搜索它,但我找不到解决方案......
也许我使用错误的关键字,因为我不知道这个问题的具体关键字...

foreach ($users as $user) {
    $username = $user->user->username; //the echo is johnjohnbobmichaelstephenricksamuel
    $tagname= "@".$username." "; //the echo is @john @john @bob @michael @stephen @rick @samuel
}

当我想让$ tagname的回显为

foreach ($users as $user) {
    $username = $user->user->username; //the echo is johnjohnbobmichaelstephenricksamuel
    $tagname= "@".$username." "; //the echo is @john @john @bob @michael @stephen @rick @samuel
}
$hello = "hay ".$tagname; //the echo is hay @johnhay @johnhay @bobhay @michaelhay @stephenhay @rickhay @samuel

我想要的是像这样的回声

hay @john @bob @michael @stephen @rick @samuel lets meet up

没有循环约翰两次......
感谢大家的关注,原谅我的语言,我不能说英语很多......

2 个答案:

答案 0 :(得分:2)

您可以创建这样的标记名数组:

$tagnames = [];

foreach ($users as $user) {
    $username = $user->user->username; //the echo is johnjohnbobmichaelstephenricksamuel
    $tagname= "@".$username; //the echo is @john @john @bob @michael @stephen @rick @samuel
    $tagnames[] = $tagname;
}

echo "hay " . implode(' ', array_unique($tagnames));

答案 1 :(得分:0)

我怀疑所提供的代码是您遇到问题的代码。考虑以下代码

foreach ($users as $user) {
    $username = $user->user->username; 
    $tagname= "@".$username." ";
}
$hello = "hay ".$tagname;
每次循环迭代都会重新分配

$tagname。因此$hello应仅包含最后一个标记名。因此,如果我们echo $hello输出将是嘿@samuel 。我认为John没有理由两次打印 - 至少不是你的循环。因此,我认为$users只包含约翰两次。请参阅以下代码以获取精简示例

<?php

$users = ["john", "jack", "joe"];
foreach($users as $user)
{
    $tagnames = $tagnames."@".$user." ";
}
echo "hay ".$tagnames."lets go out!";

此代码段将输出 hay @john @jack @joe让我们出去!请参阅here

要调查您的问题,首先您应该考虑使用$users - see here转储var_dump。这应该澄清你的约翰问题。此外,您应该更好地理解代码的作用以及如何不混淆用于构建输出的代码和实际输出代码的代码。

最后但并非最不重要:请重新检查实际显示您所描述行为的代码,因为我没有看到您问题中的代码可能。