Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在查找foreach()循环的最后一个条目,内爆无效_Php_Foreach_Implode - Fatal编程技术网

Php 正在查找foreach()循环的最后一个条目,内爆无效

Php 正在查找foreach()循环的最后一个条目,内爆无效,php,foreach,implode,Php,Foreach,Implode,我在数组中循环以打印文章名称: <?php if ($articles) { foreach($articles as $article) { echo $article->name.", "; } // end foreach article } // end if has articles ?> 但我正在寻找: Apple, Banana, Mango 我试过这样的内爆声明: <?php if ($articles

我在数组中循环以打印文章名称:

<?php
if ($articles) { 
    foreach($articles as $article) { 
        echo $article->name.", ";       
    } // end foreach article
} // end if has articles
?>
但我正在寻找:

Apple, Banana, Mango
我试过这样的内爆声明:

<?php
if ($articles) { 
    foreach($articles as $article) { 
        echo implode(", ", $article->name);     
    } // end foreach article
} // end if has articles
?>



这些都不适合我。怎样才能把它做好?谢谢你的提示

您可以使用
foreach
将项目名称添加到数组中,然后
infrade()
将项目名称添加到该名称数组中

<?php
if ($articles) { 
    $article_names = array();

    foreach($articles as $article) { 
        $article_names[] = $article->name;
    } // end foreach article

    echo implode(', ', $article_names);
} // end if has articles
?>

检查第一次循环迭代要容易得多,在文本前写上逗号,并在第一次迭代时保留逗号A:

<?php
if ($articles) { 
    $firstiteration = true:
    foreach($articles as $article) { 
        if(!$firstiteration){
            echo ", ";
        }
        $firstiteration = false;
        echo $article->name;       
    } // end foreach article
} // end if has articles
?>

简单地说,
echo内爆(“,”,$articles)

这是做你想做的事情的更好方法:

<?php
$string = '';
if ($articles) { 
    foreach($articles as $article) { 
        $string .= $article->name.", ";       
    }
}
$string = substr($string, 0, -2);
echo $string;
?>

PHP有很多很好的数组函数,这对其中一个非常重要

$namesArray = array_map(function($x){return $x->name;}, $articles);
$string = implode(',' $namesArray);


我也非常喜欢上面对uu-toString函数的响应,但我想展示这些数组函数,因为我认为它们在赞成或不必要的foreach循环中经常使用不足。

您可以使用trim函数删除最后一个逗号和空格。这是最简单的方法

<?php
    if ($articles) { 
         foreach($articles as $article) { 
             echo trim(implode(", ", $article->name), ', '); 
         }
     }
?>


您有两个选择:1。不要在不必要的地方使用OOP语法。在需要数组的地方使用数组,然后利用内爆()。2.查找最后一个条目。有近十几种方法。试着至少找一个。它看起来很难看。2个循环,其中只需要1个。@Col我只能看到一个循环。@sexyprout:他可能指的是
内爆()
中的内部循环。(我还没有看到该函数的源代码,所以我不确定它是否是通过循环实现的。)@sexyprout如果将此代码包装到函数中,则连一个都看不到。这并不意味着这个函数可以用魔杖完成它的工作。更好或者不更好,但是非常好的一个+1在您的第一个代码片段中有一个小错误,
echo$article->name.“,”应该是
echo$article->name
…其他小错误-将firstIteration设置为false应该发生在if块之外,否则它将永远不会运行,而不是检查第一次迭代,这是打破旧的常规
for
循环的好地方。那些确实存在,你知道:)@Billy,只有当它是一个数字索引数组时才有效。您打算“手动”执行第一个操作,然后对其余元素进行迭代?+1用于显示数组映射-在这种情况下,我更喜欢toString/内爆组合或foreach循环,但每个人都应该知道这些数组函数(很多人不知道)@oezi array\u映射可以使用数组。以及内爆,这是OP的问题。@oezi我看不到你的+1;-)
<?php
$string = '';
if ($articles) { 
    foreach($articles as $article) { 
        $string .= $article->name.", ";       
    }
}
$string = substr($string, 0, -2);
echo $string;
?>
$namesArray = array_map(function($x){return $x->name;}, $articles);
$string = implode(',' $namesArray);
$first = true;
array_walk(function($x) use (&$first)
           {
               if(!$first) {echo ', ';} else{$first = false;}
               echo $x->name;
           }, $articles);
<?php
    if ($articles) { 
         foreach($articles as $article) { 
             echo trim(implode(", ", $article->name), ', '); 
         }
     }
?>