繁体   English   中英

如何在重复一些数据的php数组中对数据进行排序和分组?

[英]How to sort and group datas in a php array where some datas are repeated?

我有一个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
        )

而且我检查actors数组中是否存在$films数组中的数据:

$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循环,它可能会消耗很多资源。

对于您想要做的事情,您可以做很多事情来避免循环,但是您可以对数组进行一些结构化设置,使其按照自己的意愿进行。 与其创建两个单独的$films$actors数组, $films创建一个$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"] ,它将为您提供一系列演员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM