【问题标题】:Create An Associative Array In PHP From MySQL With Duplicate Values在 PHP 中从 MySQL 中创建具有重复值的关联数组
【发布时间】:2014-07-23 04:29:45
【问题描述】:

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

【问题讨论】:

  • 这是我昨天的例子:),你只需要在 db 上做一个简单的选择,我只是用那个虚拟数据作为例子。

标签: php mysql sql arrays associative-array


【解决方案1】:

你只需要做一个简单的查询。按照这个例子:

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"}]}}

【讨论】:

  • 非常感谢您。这确实对我的网站有所帮助。
【解决方案2】:

我认为你会像下面的伪代码一样获取你的 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 语句来检查其他答案并将其设置为各自的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    相关资源
    最近更新 更多