使用重复值从MySQL在PHP中创建关联数组

时间:2014-06-02 23:40:49

标签: php mysql sql arrays associative-array

我有一个MySQL数据库,其中包含一个名为users的表,我需要将其制作成一个数组。但它必须能够处理重复值。

当找到重复值时,它会将值加入一个键下。我只需要在user_id列中加入这些值,因为这将是一个电子商务网站,人们可以一次购买多个项目。

这是我的数据库的样子,特别是名为queue的表:

Table Queue:
user_id, item_id
100, 103850
100, 103850
100, 129374
101, 303213
101, 103850

我需要它,返回一个看起来像这样的数组:

    array(
    100 => array(
        'items' => array(
            array('item_id' => 103850),
            array('item_id' => 103850),
            array('item_id' => 129374),
        ),
    ),
    101 => array(
        'items' => array(
            array('item_id' => 303213),
            array('item_id' => 103850),
        ),
    ),
);

现在这是我现在使用的代码,我从之前提出的另一个问题中得到了这个代码,但它并没有完全回答我的问题。

<?php

function getAllUsers() {
    $data_from_db = array(
        100 => array(
            'items' => array(
                array('item_id' => 103850),
                array('item_id' => 103850),
                array('item_id' => 129374),
            ),
        ),
        101 => array(
            'items' => array(
                array('item_id' => 303213),
                array('item_id' => 103850),
            ),
        ),
    );

    // while loop fetch to array blah blah

    $users = $data_from_db;
    return $users;
}

if(isset($_GET['jsoncallback'])) {
    $data = getAllUsers();
    header('Content-Type: application/json');
    echo json_encode($data);
    exit;
}

?>

上面的代码有什么问题,它是手动输入到PHP脚本中的,而不是使用MySQL查询生成的。我希望它使用MySQL查询生成,但我在如何解决这个问题时遇到了很多麻烦。

2 个答案:

答案 0 :(得分:0)

您只需要进行简单的查询即可。请遵循以下示例:

function getAllUsers() {
    $data = array();
    // host - username - password - database
    $connection = new mysqli('localhost', 'test', 'test', 'test');
    $query = mysqli_query($connection, 'SELECT `user_id`, `item_id` FROM `table_queue`');
    while($row = $query->fetch_assoc()) {
        $data[$row['user_id']]['items'][] = array('item_id' => $row['item_id']);
    }
    return $data;
}

if(isset($_GET['jsoncallback'])) {
    $data = getAllUsers();
    header('Content-Type: application/json');
    echo json_encode($data);
    exit;
}

?>

当你致电http://yoursite.com?jsoncallback时,你会得到类似的结果:

  

<强> {"100":{"items":[{"item_id":"103850"},{"item_id":"103850"},{"item_id":"129374"}]},"101":{"items":[{"item_id":"303213"},{"item_id":"103850"}]}}

答案 1 :(得分:0)

我按下你要获取你的sql数据就像这个伪代码:

$data = array();
while($row = mysqli_fetch_assoc($sql)) {
    $data[] = $row;
}

给你类似的东西:

Array
(
    [0] => Array
        (
            [100] => 103850
        )

    [1] => Array
        (
            [100] => 103850
        )

    [2] => Array
        (
            [100] => 129374
        )
......etc

)

允许以下内容:

        $data = array();

        foreach ($sql as $item) {
            foreach ($item as $key => $val) {
                if (!isset($data[$key][$val])) {
                    $data[$key][] = array('item_id' => $val);
                }
            }
        }

渲染:

Array
(
    [100] => Array
        (
            [0] => Array
                (
                    [item_id] => 103850
                )

            [1] => Array
                (
                    [item_id] => 103850
                )

            [2] => Array
                (
                    [item_id] => 129374
                )

        )

    [101] => Array
        (
            [0] => Array
                (
                    [item_id] => 303213
                )

            [1] => Array
                (
                    [item_id] => 103850
                )

        )

)

说实话;这可能不是解决这个问题的最好方法。你很可能会使用条件if语句来检查和设置各自的数组。