如何仅挑选数组中的前几项?
这里有人为我回答简单的东西。我尝试过搜索,但我不知道我在找什么。如何仅挑选数组中的前几项?
我有一个来自PHP的JSON字符串的演员和剧组成员的电影数组。
在这里,我拉出与作业名称“演员”
foreach ($movies[0]->cast as $cast) {
if ($cast->job == 'Actor') {
echo '<p><a href="people.php?id=' . $cast->id . '">' . $cast->name . ' - ' . $cast->character . '</a></p>';
}
}
的问题是,我希望能够有多少人限制与作业名“演员”被拉到只有人民出。说,第一个3.
那么我怎么会只选择这些人中的前3这个数组?
一旦你到3
$num_actors = 0;
foreach ($movies[0]->cast as $cast) {
if ($cast->job == 'Actor') {
echo '...';
$num_actors += 1;
if ($num_actors == 3)
break;
}
}
感谢大家的帮助。我在这里选择了这个,不过因为它看起来很受欢迎而且对我很有用。 – Rowan 2011-05-02 02:04:00
添加计数器和if语句。
$count = 0;
foreach ($movies[0]->cast as $cast)
{
if ($cast->job == 'Actor')
{
echo '<p><a href="people.php?id=' . $cast->id . '">' . $cast->name . ' - ' . $cast-character . '</a></p>';
if($count++ >= 3)
break;
}
}
$limit = 3;
$count = 0;
foreach ($movies[0]->cast as $cast) {
// You can move the code up here if all you're getting is Actors
if ($cast->job == 'Actor') {
if ($count == $limit) break;// stop the loop
if ($count == $limit) continue;// OR move to next item in loop
$count++;
echo '<p><a href="people.php?id='
. $cast->id
. '">'
. $cast->name
. ' - '
. $cast->character
. '</a></p>';
}
}
$actors=array_filter($movies[0]->cast, function ($v) {
return $v->job == 'Actor';
});
$first3=array_slice($actors, 0, 3);
甚至
使用一种称为$num_actors
变量来跟踪你有多少已经计数,
break
圈外
$limit=3;
$actors=array_filter($movies[0]->cast, function ($v) use (&$limit) {
if ($limit>0 && $v->job == 'Actor') {
$limit--;
return true;
}
return false;
});
行 - 这个我对这个问题有点过分杀手,但也许它有一些教育目的。 PHP带有一组迭代器,可用于抽象对给定项目集的迭代。
class ActorIterator extends FilterIterator {
public function accept() {
return $this->current()->job == 'Actor';
}
}
$maxCount = 3;
$actors = new LimitIterator(
new ActorIterator(
new ArrayIterator($movies[0]->cast)
),
0,
$maxCount
);
foreach ($actors as $actor) {
echo /*... */;
}
通过扩展抽象类FilterIterator
我们能够定义一个过滤器,只返回从给定列表中的演员。 LimitIterator
允许您将迭代限制为给定集合,并且ArrayIterator
是使本地阵列与Iterator
接口兼容的简单助手。迭代器允许开发人员构建定义迭代过程的链,这使得它们非常灵活和强大。
正如我在介绍中所说的:如果没有这个Iterator的东西,给定的问题可以很容易地解决,但它为开发人员提供了一些扩展选项并支持代码重用。例如,您可以将ActorIterator
增强为CastIterator
,这允许您在构造函数中传递类型以进行过滤。
+1非常好的一个:) – kapa 2011-05-02 07:09:57
下面的其他选项是在循环中添加一个计数器 – 2011-05-02 00:08:40