操纵多维数组和表示

时间:2011-07-09 11:06:56

标签: php

我想知道哪个用户不属于数据库中可用的其他游戏,我得到一个数组如下

$arr2=Array
(
    (0) => Array
        (
            (uid) => 1,
            (game_id) => 22
        ),

    (1) => Array
        (

            (uid) => 2,
            (game_id) => 22
        )
    (2) => Array
        (

            (uid) => 1,
            (game_id) => 23
        )
    (3) => Array
        (

            (uid) => 3,
            (game_id) => 24
        )
);

例如,用户1在游戏22,23但是在24用户3仅在游戏24中 我想找出哪个用户没有参与其他游戏,问题是效率(执行速度) 以及如何在数组中表示,以便我可以使用它来显示。这是神的想法让它像 用户ID => notInGame,notInGame(CSV)?

2 个答案:

答案 0 :(得分:1)

如何在PHP中执行此操作的示例:

$array = array(
    array
    (
        'uid' => 1,
        'game_id' => 22
    ),
    array
    (
        'uid' => 2,
        'game_id' => 22
    ),
    array
    (
        'uid' => 1,
        'game_id' => 23
    ),
    array
    (
        'uid' => 3,
        'game_id' => 24
    ),

);

$games = $users = array();

foreach($array as $value)
{
    $games[]                = $value['game_id'];
    $users[$value['uid']][] = $value['game_id'];
}

foreach($users as $uid => $user)
{
    $users[$uid] = array_diff($games, $user);
}

print_r($users);

结果(键是uid):

Array
(
    [1] => Array
        (
            [3] => 24
        )

    [2] => Array
        (
            [2] => 23
            [3] => 24
        )

    [3] => Array
        (
            [0] => 22
            [1] => 22
            [2] => 23
        )

)

答案 1 :(得分:0)

如果您不需要组ID,则下面是非常简单的查询。 num字段是用户所在的多个组。

SELECT `uid`, COUNT(*) AS `num`
FROM `a_table`
GROUP BY `uid`;

你会得到这样的东西

$arr2=Array
(
    (0) => Array
        (
            (uid) => 1,
            (num) => 2
        ),

    (1) => Array
        (

            (uid) => 2,
            (num) => 1
        )
    (2) => Array
        (

            (uid) => 3,
            (num) => 1
        )
);