我有一个php数组,其中包含有时相同的值(在我的例子中是电影1和电影2),我想对结果进行排序,以便只保留一次电影1或电影2。
PHP数组:$actors
Array
(
[0] => Array
(
[0] => film 1
[1] => actor A
)
[1] => Array
(
[0] => film 1
[1] => actor B
)
[2] => Array
(
[0] => film 2
[1] => actor C
)
[3] => Array
(
[0] => film 2
[1] => actor D
)
)
我可以在foreach循环中输出数据:
$i = 0;
foreach ($films as $film):
echo $film[$i][0].'<br />';
echo $film[$i][1];
$i ++;
endforeach;
我得到这样的结果:
film1 actor A film1 actor B film2 actor C film2 actor D
但我希望得到这样的结果:
film 1
actor A
actor B
film 2
actor C
actor E
我做了什么:
我用电影制作了一个阵列:$films
Array
(
[0] => stdClass Object
(
[name] => film1
)
[1] => stdClass Object
(
[name] => film2
)
我检查$films
数组中是否存在actors
数组中的数据:
$i = 0;
foreach ($films as $film):
foreach ($actors as $actor):
if ($film->name == $actor[$i][0]) {
echo $actor[$i][1].'<br />';
}
endforeach;
$i ++;
endforeach;
所以这段代码对我有用,但有更好的解决方案吗?在我的解决方案中,我在foreach循环中有一个foreach循环,它可能消耗大量的资源。
答案 0 :(得分:1)
对于你想要做的事情,你可以做很多事情来避免循环,但是你可以稍微构建你的数组以使它做你想做的事情。您需要创建一个$films
数组,并且每个$actors
数组都与该电影相关联,而不是拥有两个单独的$films
和$actors
数组:
$films = []; // PHP 5.4 style array shortcut. Creates a new empty array (same as array())
foreach($actors as $actor)
{
$filmName = $actor[0];
$actorName = $actor[1];
// If this film isn't in the array yet, let's create it
if(!isset($films[$filmName]))
{
$films[$filmName] = [];
}
// Add the actor to the film array
array_push($films[$filmName], $actorName);
}
在$actors
数组上运行上述代码会生成以下$films
数组
Array
(
[film 1] => Array
(
[0] => actor A
[1] => actor B
)
[film 2] => Array
(
[0] => actor C
[1] => actor D
)
)
要获得对电影中演员列表的访问权限,您可以使用$films["film 1"]
,它会为您提供一系列演员。