从MySQL在PHP中创建具有重复值的关联数组

从MySQL在PHP中创建具有重复值的关联数组,php,mysql,sql,arrays,associative-array,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 但我需要它来返回一个

我有一个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查询生成,但我在弄清楚如何生成时遇到了很多麻烦。

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

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,你会得到这样的结果:

    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),
        ),
    ),
);
{100:{items:[{item_id:103850},{item_id:103850},{item_id:129374}}},101:{items:[{item_id:303213},{item_id:103850}}


我按下按钮,您将获取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语句来检查并设置它们各自的数组。这是我昨天的示例:,您只需要在db上进行一个简单的选择,我只是使用该虚拟数据作为示例。非常感谢。这确实帮助了我的网站。